linux命令替换行尾的指定内容

时间:2013-10-20 02:48:27

标签: linux ubuntu

我有一个以下格式的文件(sample1.txt):

1    a
2    b\
3    d
4    e\
5    k
6    hello\hi
7    stackoverflow\site\

现在如果一行的最后一个字符是'\',那么我想用''替换它,这样我将sample1.txt转换为以下文件:

1    a
2    b
3    d
4    e
5    k
6    hello\hi
7    stackoverflow\site

我知道使用编程语言可以做同样的事情,但是可以使用linux命令(如grep,sed等)来做同样的事情

3 个答案:

答案 0 :(得分:3)

尝试:

cat sample1.txt | sed 's/\\$//'

答案 1 :(得分:1)

使用Sed,您可以执行以下操作:

sed -i 's/\\$//' samples.txt

将开始替换。 //是什么匹配。在这种情况下,第一个\是第二个\是你想要替换的是字面上使用而不是作为sed命令的一部分\ =匹配一个\而\单独表示完全不同的东西。 $表示从行尾查找第一个实例,因此您不匹配该行中的任何其他“\”。

//是第一个模式匹配的结束和替换文本的开始,所以如果你在哪里做/ test /文件末尾的/将被替换为测试,输出看起来像

sed -e 's/\\$/test/' sample.txt 
1    a
2    btest
3    d
4    etest
5    k
6    hello\hi
7    stackoverflow\sitetest

sed命令中的-i将执行内联替换,因此它会修改文件并且不会打印到STDOUT

  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if extension supplied)

关于sed的补充阅读。希望这会有所帮助。

答案 2 :(得分:0)

请检查,

 # cat checkin.sh
 root/
 postfix/
 root/
 postfix/

 # sed -i 's/\/$//g' checkin.sh  ----> to remove last / in file.

 # cat checkin.sh
 root
 postfix
 root
 postfix

 # sed -i 's/$/\//g' checkin.sh  -----> to add / in every line's end.

 # cat checkin.sh
 root/
 postfix/
 root/
 postfix/

感谢。