如何在保持注释行不变的情况下替换/删除文件中的字符?我正在寻找具有以下几行效果的东西(其中'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
谢谢!
与您的脚本相比,此 sed 命令等效、更准确(且更快):
sed '/^ *#/!{s/X/Y/g;}' file.txt
这意味着匹配行首没有0 or more spaces followed by #
的任何行,并将 X 替换为 Y 全局。
我愿意打赌 perl 会比上面所有的都快:
perl -i -pe 's/X/Y/g unless /^#/' file.txt
awk
版本:
awk '!/^ *#/{gsub(/X/,"Y")}1' file.txt
一定要寻找单词边界以防止替换的子字符串被替换。例如,gawk
你可以使用\<
和\>
sed -i '/^#/! s/{what_to_replace}/{to_what_to_replace}/g' file.txt
为了快速替换,使用sed
,并且只替换不以“#”开头的行:
cat foo.txt | sed -e '/^#/! s/X/Y/g'