Bash脚本 - Sed命令

时间:2015-11-25 10:39:52

标签: bash unix sed

我创建了一个脚本,在每行末尾添加100个空格字符:

#!/bin/ksh
sed -i -e 's/\n/            - 100 spaces  -                         /' $1     

但它不起作用,我认为这是因为\n。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

Sed处理行的内容而不用换行符。您的代码永远不会看到换行符,因此无法替换它。

匹配字符串的结尾:

sed -i -e 's/$/ - 100 spaces - /' $1 

答案 1 :(得分:1)

虽然Karoly已经在你的脚本中指出了错误,但你也可以通过使用条件和break来节省自己输入100个空格来进行循环

sed ':1;/ \{100\}$/!{s/$/ /;b1}' file

将在行尾打印100个空格

如果最后已经有空格而您想添加100

sed 's/$/1/;:1;/1 \{100\}$/!{s/$/ /;b1};s/1\( *\)$/\1/' file

答案 2 :(得分:0)

只是建议避免输入100个空格(虽然我确定到目前为止,你已经有了!) - 使用perl:

<a href='' class=' ' title='Coroner's Request' >

正如其他答案所述,这匹配行的末尾并替换为100个空格,使用perl -pe 's/$/" " x 100/e' file 修饰符允许您编写e并让perl为您完成工作。

与sed一样,您可以使用" " x 100开关就地修改文件 - 与sed一样,我建议使用类似-i的内容来创建备份文件{{1 }}

答案 3 :(得分:0)

可能是POSIX未定义的\n,因此实现依赖于seds但你也说你想在脚本尝试用空格替换行尾时添加空格到行尾。

在任何情况下,这都不是sed的工作,只需在awk中使用[s]printf("%100s","")来创建一个包含100个空格的字符串,例如:

$ echo "foo bar" | awk '{printf "%s%10s%s\n", $1, "", $2}'
foo          bar