如何在BASH中查找并替换文件每行中的最后一个空格?

时间:2014-11-30 00:37:58

标签: regex bash replace sed

我有一个这样的文件:

Once upon a time there lived a cat.
The cat lived in the forest.
The forest had many trees.

我需要用“@”替换每行的最后一个空格,例如:

Once upon a time there lived a@cat.
The cat lived in the@forest.
The forest had many@trees.

我尝试sed 's/ .*$/@/g' file.txt,但.*匹配所有内容,并删除了那里找到的所有文字。

如何用“@”替换每行的最后一个空格?

4 个答案:

答案 0 :(得分:3)

试试这个:

sed 's/\(.*\) /\1@/'

答案 1 :(得分:2)

匹配最后一个空格的正则表达式是(?=\S+$),不知道如何将sed切换到PCRE模式(以支持前瞻):

perl -ple "s/ (?=\S+$)/@/" file.txt

答案 2 :(得分:1)

我通常使用Perl:

perl -ple 's/ ([^ ]+)$/@\1/' file.txt

答案 3 :(得分:1)

尝试

s/\s([^\s]*)$/@\1/g
祝你好运, 鲍勃

编辑: 大声笑,测试它,似乎做你想要的:))

my $s = "the quick brown fox jumped";
$s =~ s/\s([^\s]*)$/@\1/g;
print $s;
# prints the quick brown fox@jumped