当前位置: 技术问答>linux和unix
文本文件分隔符替换
来源: 互联网 发布时间:2017-01-12
本文导语: 一个目录下有很多文件,文件名是20111102_abc.dat 文件内容大致如下: abcdefg!|132451gger!|dafdaf abcdefg|1243435fgragd!|dadfdaf 要把向第2行一样的单个|作为分隔符的字符串替换为!|为分隔符,脚本怎么写呀? 我用sed尝试了一下不行...
一个目录下有很多文件,文件名是20111102_abc.dat
文件内容大致如下:
abcdefg!|132451gger!|dafdaf
abcdefg|1243435fgragd!|dadfdaf
要把向第2行一样的单个|作为分隔符的字符串替换为!|为分隔符,脚本怎么写呀?
我用sed尝试了一下不行,请赐教。
文件内容大致如下:
abcdefg!|132451gger!|dafdaf
abcdefg|1243435fgragd!|dadfdaf
要把向第2行一样的单个|作为分隔符的字符串替换为!|为分隔符,脚本怎么写呀?
我用sed尝试了一下不行,请赐教。
|
echo 'abcdefg|1243435fgragd!|dadfdaf' | sed -r 's/([^!])|/1!|/g'
abcdefg!|1243435fgragd!|dadfdaf
|
最佳答案:
echo 'abcdefg|1243435fgragd!|dadfdaf' | sed 's:[^!]|:!|:g'
1楼的我试了下因为斜杠太多,结果终端报错了。建议将/用:来替换,这样就不用来转义了,方便也好看。
谢谢!
echo 'abcdefg|1243435fgragd!|dadfdaf' | sed 's:[^!]|:!|:g'
1楼的我试了下因为斜杠太多,结果终端报错了。建议将/用:来替换,这样就不用来转义了,方便也好看。
谢谢!
|
sed -i 's/!|/|/g' 20111102_abc.dat
sed -i 's/|/!|/g' 20111102_abc.dat
|
三楼的方法最好,写的最清楚
|
$ echo 'abcdefg|1243435fgragd!|dadfdaf' |sed 's#([^!])|#1!|#'
abcdefg!|1243435fgragd!|dadfdaf
abcdefg!|1243435fgragd!|dadfdaf
|
你这个有问题哦,会删掉一个字符。