示例,
我有一个文件测试,带有三行,例如
Tell:you are the one
Great! that helped me
you:me are the one to go
在此文件中,我喜欢搜索字符串" you:me",在找到它之后,它必须在#之前附加#
就像这样
Tell:you are the one
Great! that helped me
#you:me are the one to go
预先感谢
您可以简单地使用正则表达式:
sed 's/^you:me/#you:me/' thefile.txt
我在这里假设you:me
始终处于线路的开头,否则如果要匹配所有you:me
S:
sed 's/you:me/#you:me/g' thefile.txt
使用sed
sed 's/you:me/#&/' file
我会做:
sed '/you:me/s/^/#/'
这将找到一个包含you:me
的行,无论它是在开始还是中间,在行开头添加#
so
foo you:me bar -> #foo you:me bar
you:me foo -> #you:me foo
正如其他答案所建议的,我会使用sed。但是,如果您正在寻找纯bash解决方案,请使用以下方式:
while read line; do
if [[ "$line" == "you:me"* ]]; then
echo "#$line"
else
echo "$line"
fi
done
Chepner建议,您可以用bash替换替换IF结构:
while read line; do
echo "${line/#you:me/#you:me}
done
如评论中所述:第一个哈希是一个标志,表明匹配应在$line
的开头,第二个是我们要放在行前面的字面哈希。
这是一个尴尬的选择,仅仅是因为:
awk '/you:me/ { print "#"$0 }'