我想要一个bash方式从标准输入读取行(所以我可以输入管道),并只删除前导和尾随空格字符.管道回声不起作用.
例如,如果输入是:
12 s3c
sd wqr
Run Code Online (Sandbox Code Playgroud)
输出应该是:
12 s3c
sd wqr
Run Code Online (Sandbox Code Playgroud)
我想避免编写python脚本或类似的东西,因为这是微不足道的.任何帮助表示赞赏!
phi*_*lip 27
你可以使用sed修剪它.
sed 's/^ *//;s/ *$//'
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作在命令行上轻松测试它:
echo -n " 12 s3c " | sed 's/^ *//;s/ *$//' && echo c
Run Code Online (Sandbox Code Playgroud)
Pau*_*ce. 22
$ 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..
Run Code Online (Sandbox Code Playgroud)
要使其适用于多行输入,只需添加一个while循环:
trim () { while read -r line; do echo "$line"; done; }
Run Code Online (Sandbox Code Playgroud)
sed仅使用一个替换:
sed 's/^\s*\(.*[^ \t]\)\(\s\+\)*$/\1/'
Run Code Online (Sandbox Code Playgroud)
your_command | xargs -L1 echo
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为echo将所有制表符转换为空格,然后将所有多个空格转换为单个空格,而不仅仅是前导和尾随,请参见示例:
$ printf " 1\t\t\t2 3"
1 2 3
$ echo `printf " 1\t\t\t2 3"`
1 2 3
Run Code Online (Sandbox Code Playgroud)
缺点是它还会删除一些有用的字符,例如\ ' ".
| 归档时间: |
|
| 查看次数: |
27976 次 |
| 最近记录: |