1

我有以下形式的文件(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 等)来做同样的事情

4

3 回答 3

3

尝试 :

cat sample1.txt | sed 's/\\$//'
于 2013-10-20T02:52:05.617 回答
1

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

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

s 将开始替换。// 是匹配的对象。在这种情况下,第一个 \ 是您要替换的第二个 \ 字面意思,而不是作为 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。希望这可以帮助。

于 2013-10-20T03:17:55.123 回答
0

Kindly check with,

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

Thanks.

于 2013-10-20T03:27:44.507 回答