快速替换文件中的字符忽略注释行的方法

时间:2013-06-24 13:27:50

标签: bash shell scripting

如何在保留注释行的同时替换/删除文件中的字符?我正在寻找以下几行的效果(其中'X'替换为file.txt中的'Y'),只是显着更快

while read line
do  
  if [[ ${line:0:1} = "#" ]]
  then
    echo "$line"
  else
    echo "$line" | tr "X" "Y"
  fi
done < file.txt

谢谢!

5 个答案:

答案 0 :(得分:4)

与您的脚本相比,此sed命令的等效,更准确(和更快):

sed '/^ *#/!{s/X/Y/g;}' file.txt

这意味着匹配行开头没有0 or more spaces followed by #的任何行,并将X替换为全局。

答案 1 :(得分:1)

我愿意打赌perl会比以上更快:

 perl -i -pe 's/X/Y/g unless /^#/' file.txt

答案 2 :(得分:0)

要快速替换,请使用sed,并且只能以“#”开头替换而不是

 cat foo.txt | sed -e '/^#/! s/X/Y/g'

答案 3 :(得分:0)

sed -i '/^#/! s/{what_to_replace}/{to_what_to_replace}/g' file.txt

答案 4 :(得分:0)

awk版本:

awk '!/^ *#/{gsub(/X/,"Y")}1' file.txt

查找单词边界以防止替换的子字符串被替换。例如,使用gawk,您可以使用\<\>