標準入力から行を読み取るbashの方法(パイプ入力で入力できるようにする)を行い、先頭と末尾のスペース文字だけを削除します。エコーする配管が機能しない。
たとえば、入力が次の場合:
12 s3c
sd wqr
出力は次のようになります。
12 s3c
sd wqr
pythonスクリプトなどを、これと同じくらい簡単なもので書くことは避けたいです。どんな助けでもありがたいです!
Sedを使用してトリミングできます。
sed 's/^ *//;s/ *$//'
あなたはそれをコマンドラインで本当に簡単にテストすることができます:
echo -n " 12 s3c " | sed 's/^ *//;s/ *$//' && echo c
$ 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..
複数行の入力で機能させるには、while
ループを追加するだけです。
trim () { while read -r line; do echo "$line"; done; }
one置換のみでsed
を使用:
sed 's/^\s*\(.*[^ \t]\)\(\s\+\)*$/\1/'
これを追加:| sed -r 's/\s*(.*?)\s*$/\1/'
私はこれが古いことを知っていますが、別の単純で汚い方法があります:
line=$(echo $line)
この例を見てください:
user@Host:~$ x=" abc "
user@Host:~$ echo "+$x+"
+ abc +
user@Host:~$ y=$(echo $x)
user@Host:~$ echo "$y"
+abc+
your_command | xargs -L1 echo
これが機能するのは、echo
がすべてのタブをスペースに変換してから、先頭と末尾だけでなく、すべての複数のスペースを1つのスペースに変換するためです。例を参照してください。
$ printf " 1\t\t\t2 3"
1 2 3
$ echo `printf " 1\t\t\t2 3"`
1 2 3
欠点は、\
'
"
などの便利な文字も削除されることです。