Bash脚本-Sed命令

Bash脚本-Sed命令,bash,unix,sed,Bash,Unix,Sed,我创建了一个脚本,在每行末尾添加100个空格字符: #!/bin/ksh sed -i -e 's/\n/ - 100 spaces - /' $1 但它不起作用,我想这是因为\n。有什么想法吗?Sed处理行的内容而不处理换行符。您的代码从未看到换行符,因此无法替换它 匹配字符串的结尾: sed -i -e 's/$/ - 100 spaces - /' $1 Sed处理不带换行符的行的内容。您的代码从未看到

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

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

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

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

匹配字符串的结尾:

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

Sed处理不带换行符的行的内容。您的代码从未看到换行符,因此无法替换它

匹配字符串的结尾:

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

虽然Karoly已经指出了脚本中的错误,但是通过使用条件和中断来创建一种循环,也可以节省键入100个空格的时间

sed ':1;/ \{100\}$/!{s/$/ /;b1}' file
将在行尾打印100个空格

如果末尾已经有空格,并且要添加100

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

虽然Karoly已经指出了脚本中的错误,但是通过使用条件和中断来创建一种循环,也可以节省键入100个空格的时间

sed ':1;/ \{100\}$/!{s/$/ /;b1}' file
将在行尾打印100个空格

如果末尾已经有空格,并且要添加100

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

建议您避免键入100个空格(尽管我确信此时您已经输入了!)-使用perl:

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


与sed一样,您可以使用
-i
开关就地修改文件-与sed一样,我建议使用
-i.bak
之类的方法创建备份文件
file.bak
这只是一个避免键入100个空格的建议(尽管我确信此时您已经有了!)-使用perl:

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


与sed一样,您可以使用
-i
开关就地修改文件-与sed一样,我建议使用
-I.bak
之类的东西来创建备份文件
文件。bak

可以是
\n
,因为POSIX没有定义它,所以它依赖于SED的实现,但您也可以说,当脚本试图用空格替换行尾时,您希望在行尾添加空格

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

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

可以是
\n
,因为POSIX没有定义它,所以在SED中依赖于实现,但是您也可以说,当脚本试图用空格替换行尾时,希望在行尾添加空格

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

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

但如果已经有了,就不会再增加100;当有100个空格时,它将停止。@tripleee为此添加了一个。或者您可以使用printf:
sed“s/\$/$(printf“%.0s”{1..100})/”文件
@A.Danischewski Yep!我尽量避免在sed中嵌入命令,因为它往往有点脆弱。@123是的,如果你打开那个样式的门,它可能会变成一罐蠕虫。您可以使用
echo“sed\”s/\$/$(printf“%.0s”{1..100})/\”“
以编程方式生成它,我会在空间计数上方添加一条注释,这样您以后就不必再浪费时间了;当有100个空格时,它将停止。@tripleee为此添加了一个。或者您可以使用printf:
sed“s/\$/$(printf“%.0s”{1..100})/”文件
@A.Danischewski Yep!我尽量避免在sed中嵌入命令,因为它往往有点脆弱。@123是的,如果你打开那个样式的门,它可能会变成一罐蠕虫。您可以使用
echo“sed\”s/\$/$(printf“%.0s”{1..100})/\”“
以编程方式生成它,我会在空间计数上方添加一条注释,这样以后就不必浪费时间了。