How do I trim lines read from standard input on bash?
我想要一个bash方式从标准输入读取行(所以我可以输入管道),并只删除前导和尾随空格字符。 管道回声不起作用。
例如,如果输入是:
1 2 | 12 s3c sd wqr |
输出应该是:
1 2 | 12 s3c sd wqr |
我想避免编写python脚本或类似的东西,因为这是微不足道的。 任何帮助表示赞赏!
你可以使用sed修剪它。
1 | sed 's/^ *//;s/ *$//' |
您可以通过执行以下操作在命令行上轻松测试它:
1 | echo -n" 12 s3c " | sed 's/^ *//;s/ *$//' && echo c |
1 2 3 4 5 6 | $ trim () { read -r line; echo"$line"; } $ echo" aa bb cc " | trim aa bb cc $ a=$(echo" aa bb cc " | trim) $ echo"..$a.." ..aa bb cc.. |
要使其适用于多行输入,只需添加一个
1 | trim () { while read -r line; do echo"$line"; done; } |
仅使用一个替换
1 | sed 's/^\s*\(.*[^ \t]\)\(\s\+\)*$/\1/' |
添加这个:
1 | your_command | xargs -L1 echo |
这是有效的,因为
1 2 3 4 | $ printf" 1\t\t\t2 3" 1 2 3 $ echo `printf" 1\t\t\t2 3"` 1 2 3 |
缺点是它还会删除一些有用的字符,如
我知道这是旧的,但还有另一种简单而肮脏的方式:
1 | line=$(echo $line) |
看这个例子:
1 2 3 4 5 6 | user@host:~$ x=" abc " user@host:~$ echo"+$x+" + abc + user@host:~$ y=$(echo $x) user@host:~$ echo"$y" +abc+ |