我有以下文本文件,其中包含以下行:
<test="123">
<test="456">
<test="789">
我的目标是让上述文本文件在上述数字后附加关键字“HELLO”,如下所示:
<test="123.HELLO">
<test="456.HELLO">
<test="789.HELLO">
使用grep命令和cut,我设法得到引号之间的值。
grep -o "test=".* test.txt | cut -d \" -f2
我尝试在它上面使用sed,使用此行
grep -o "test=".* test.txt | cut -d \" -f2 | sed -i -- 's/$/.HELLO/' test.txt
然而,我设法得到的最接近的是一个“.HELLO”,它直接附加在该行的末尾(而不是在引号之间的数字之后)
<test="123">.HELLO
<test="456">.HELLO
<test="789">.HELLO
如何修复我的sed语句以向我提供所请求的行?
答案 0 :(得分:1)
您可以直接使用sed完成此操作。切割不应该是必要的:
grep "test=" test.txt | sed 's/"\(.*\)"/"\1.HELLO"/'
答案 1 :(得分:1)
试试这个:
这就是你的文件的样子。
bash > cat a.txt
<test="123">
<test="456">
<test="789">
您的文字传送到SED
bash > cat a.txt |sed 's/">/.HELLO">/g'
<test="123.HELLO">
<test="456.HELLO">
<test="789.HELLO">
bash >
请告诉我这是否适合您。
答案 2 :(得分:1)
你可以在sed中使用组来完成。要创建新输出,您可以执行以下操作:
sed 's/\(test="[^"]*\)"/\1.HELLO"/g' test.txt
要进行就地修改,您可以使用-i
开关:
sed -i 's/\(test="[^"]*\)"/\1.HELLO"/g' test.txt
说明:
()
是一个群组。您可以使用\1
来引用它。在sed中,我们必须逃避括号:\(\)
[^"]*
匹配所有非引用的内容。所以比赛将在报价之前停止答案 3 :(得分:1)
awk 'sub("[0-9]+","&.HELLO")' file