如何在保留注释行的同时替换/删除文件中的字符?我正在寻找以下几行的效果(其中'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
谢谢!
答案 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
,您可以使用\<
和\>