我想要一個bash的方式來讀取標準輸入行(所以我可以管輸入到它),並只刪除前導和尾隨空格字符。管道回波不起作用。如何修剪從bash上的標準輸入讀取的行?
例如,如果輸入的是:
12 s3c
sd wqr
輸出應該是:
12 s3c
sd wqr
我想避免編寫Python腳本或微不足道,因爲這類似的話。任何幫助表示讚賞!
我想要一個bash的方式來讀取標準輸入行(所以我可以管輸入到它),並只刪除前導和尾隨空格字符。管道回波不起作用。如何修剪從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; }
使用sed
只有一個替代:
sed 's/^\s*\(.*[^ \t]\)\(\s\+\)*$/\1/'
我喜歡簡單的實用方法。你需要修正while語法: 'trim(){while read -r line;做回聲「$行」;完成; }' – Barak1731475 2013-10-23 15:24:26
@ user1731475:修正,謝謝 – 2013-10-23 15:47:30
請注意,這個答案的重點是'只使用讀命令,它會默認修剪'。回聲的使用純粹是爲了匹配問題中'輸出應該'的測試條件。要查看如何不獲取請求的行爲或瞭解爲什麼它可能_possible_這可能無法正常工作,請參閱[此問題](http://stackoverflow.com/questions/7314044/use-bash-to-read-line-by直插式並保持的空間)。 – SensorSmith 2016-05-12 23:04:05
補充一點:
| sed -r 's/\s*(.*?)\s*$/\1/'
我知道這是舊的,但有另一種簡單又髒方式:
line=$(echo $line)
看到這個例子:
[email protected]:~$ x=" abc "
[email protected]:~$ echo "+$x+"
+ abc +
[email protected]:~$ y=$(echo $x)
[email protected]:~$ echo "$y"
+abc+
這是壞的:如果有glob字符,並且還將連續的空格連接起來。不要提「echo」通常是一個不好的選擇(例如,如果行以'-n','-e'或'-E'開頭)。 – 2016-09-16 09:13:41
適合我。謝謝。 – Geddon 2017-02-16 16:22:52
your_command | xargs -L1 echo
這工作,因爲echo
所有tabls爲空格,然後所有的多個空格轉換爲單個空間,不僅開頭和結尾,見例如:
$ printf " 1\t\t\t2 3"
1 2 3
$ echo `printf " 1\t\t\t2 3"`
1 2 3
的缺點是它也會刪除一些有用的字符,如\
'
"
。
如果有反斜槓或引號,這將失敗。 – 2016-09-16 09:14:07
兩個硒過程是令人不舒服的重量級。爲什麼不呢:'sed's/^ * //; s/* $ //''? – 2010-12-12 16:18:59
這對他提供的數據有效。我給你點了! :D – phillip 2010-12-12 16:27:00
爲什麼連'sed -r's/*(。*)*/\ 1/g''? – 2010-12-12 22:19:04