在字符串模式之间插入反引号

时间:2018-10-15 21:41:58

标签: bash shell

我有一个要求,我必须在某些字符串模式之间插入反引号,我已经尝试了几种sed awk组合来使其工作,但无法成功。

模式:具有以下内容的多个文件

 switch content;
 show content;

我想读取每个文件并按如下所示转换内容:

switch `content`;
show content;

最简单/最快捷的方法是什么,谢谢。

2 个答案:

答案 0 :(得分:1)

sed与捕获组一起使用。

sed -i 's/switch \([^;]*\)/switch `\1`/' filenames...

DEMO

答案 1 :(得分:0)

给出脚本

#!/usr/bin/env bash
convert_re='[[:space:]]*switch[[:space:]](.*)[;]$[[:space:]]*'
while read -r line; do
  if [[ $line =~ $convert_re ]]; then
    printf 'switch `%s`;\n' "${BASH_REMATCH[1]}"
  else
    printf '%s\n' "$line"
  fi
done

...调用为:

./convert <<'EOF'
switch contentA;
show contentA;
switch contentB;
show contentB;
EOF

...产量:

switch `contentA`;
show contentA;
switch `contentB`;
show contentB;

...如您在https://ideone.com/Qq96f5上看到的