Linux 命令以替换行尾的指定内容



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

1    a
2    b
3    d
4    e
5    k
6    hellohi
7    stackoverflowsite

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

1    a
2    b
3    d
4    e
5    k
6    hellohi
7    stackoverflowsite

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

尝试:

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

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

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

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

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

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

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

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

关于sed的附加阅读。 希望这有帮助。

请检查,

 # 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/

谢谢。

最新更新