所以,基本上我有这样的台词:
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
- 退出编辑