将标签添加到每行的特定短语

将标签添加到每行的特定短语

所以,基本上我有这样的台词:

ILU1910\ilu0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 
ILU1910\ilu0001 “ It is going make life harder for us , ” he said . 

我希望它们看起来像这样:

<ignore>ILU1910\ilu0001</ignore> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ” 
<ignore>ILU1910\ilu0001</ignore> “ It is going make life harder for us , ” he said . 

基本上在每行的开头都有 ILU1910/ilu0001,我想<ignore>在所述短语的开头和</ignore>结尾添加。

我尝试通过使用以下命令来使其工作:

cat file.txt | sed 's/^\([^A-Za-z0-9]\+ \)/<ignore>\1<\/ignore>/g'

但这似乎不起作用。我正在 MacBook 上使用终端。

答案1

使用 可以轻松完成sed

sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/' file.txt

由于只有一种模式需要匹配,因此您可以使用 更轻松地进行匹配&。如果你想使用cat,那就是

cat file.txt | sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/'

在您的尝试中,您正在处理任何非字母数字的内容[^A-Za-z0-9]。您可以使用[^ ]*以下命令将模式修改为任何非空白内容:

sed 's/^[^ ]*/<ignore>&<\/ignore>/' file.txt

答案2

如果您尝试就地编辑文件,可以使用以下脚本编写更改ed

ed -s file.txt <<< $'1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,\nw\nq'

这会ed-s静默模式进行调用,并向其发送一个带引号的字符串中的指令列表:

  • 1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,- 在每一行 ( ) 上,搜索第一部分1,$并将 ( ) 替换为第二部分。s, ... , ... ,由于替换文本中存在正斜杠,因此我将典型/分隔符更改为逗号 ( ,),因为搜索或替换文本中没有逗号。因为反斜杠是由 shell 的引用和 解释的ed,所以它们必须加倍两次,这就是 1\变成 4 的方式\\\\
  • w- 将文件写回磁盘
  • q- 退出编辑

相关内容