在行尾的sed替代模式

时间:2015-08-13 20:04:41

标签: bash sed

我正在使用1.2GB的文本文件。结束模式需要更新 'anytext},\ n]'到'anytext}]',其中\ n是旧模式中的回车符。

以下sed命令不会更新模式

sed -i -e 's/},\n]$/}]/' foo.txt
sed -i -e 's/\}\,\n\]$\/}\]/' foo.txt

知道如何更新模式吗? 我愿意使用其他bash命令,只要它适用于大文本文件。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

$ cat file
anytext},
]

$ awk 'NR>1{ if (/^]/) sub("},\n","}",prev); printf "%s",prev } {prev=$0"\n"} END{ printf "%s",prev }' file
anytext}]

如果这样做不符合您的要求,请编辑您的问题以提供一些有代表性的样本输入和预期输出。

答案 1 :(得分:0)

使用sed:

sed -i "s/\('anytext}\)\(\,[\]n\]'\)/\1]\',/g" test.txt

我在这里使用分组。分组完成\( HERE \)。第一组将保留不必修改的文本'anytext}

第二组只删除不必要的文本。然后我们可以通过在seds替换字段内部引用它来引用第一组,并添加我们需要的文本]',

然后我们达到了预期的效果:

'anytext}]', 

文件:

[anthony@localhost ~]$ cat test.txt 

'anytext},\n]'

答案 2 :(得分:0)

你快到了。你需要逃脱\ n。以下作品

$ echo  'anytext},\n]' | sed -r -e 's/},\\n]$/}]/'
anytext}]
$