如何使用 sed 搜索“/>”

如何使用 sed 搜索“/>”

/>我的需要是在目录中的所有文件的第一个字符串之后附加一个新字符串。

这是我的脚本:

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

然而,似乎所有的\n也都匹配。例如,如果一个文件是这样的:

abc
def
<abc/>
<abc/>

执行我的脚本后,我将得到如下结果:

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

它确实为第一次出现的 附加新字符串/>,但它也在第一行之前为每行附加新字符串/>

答案1

是的。该表达式0,/regex/将导致其后面的命令 ( a) 被应用到所有线路直到(并包括)正则表达式的第一个匹配项。

我的猜测是你会想做

sed -i '0,/regex/{//a text
}' "$myfile"

这将选择正则表达式的第一个匹配项之前的所有行,然后仅将命令应用于与表达式匹配的该范围内的行,同时将所有其他行传递不变。

需要文字换行符来表示您添加的文本的结尾。

相关内容