在具有特定字符串的行前添加字符

时间:2014-01-28 11:52:41

标签: bash

实施例,

我有三行文件测试,如

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

先谢谢

5 个答案:

答案 0 :(得分:1)

你可以用正则表达式来做到这一点:

sed 's/^you:me/#you:me/' thefile.txt

我假设you:me总是在行的开头,否则如果你想匹配所有you:me

sed 's/you:me/#you:me/g' thefile.txt

答案 1 :(得分:1)

使用sed

sed 's/you:me/#&/' file

答案 2 :(得分:1)

正如其他答案所示,我会使用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的开头,第二个是我们想要放在行前面的文字哈希。

答案 3 :(得分:1)

我愿意:

sed '/you:me/s/^/#/'

这会找到包含you:me的行,无论是在开头还是中间,在行的开头添加#

所以

foo you:me bar -> #foo you:me bar
you:me foo -> #you:me foo

答案 4 :(得分:0)

这是一个awk替代方案,仅仅因为:

awk '/you:me/ { print "#"$0 }'