2014-03-12 74 views
0

我還有另一個bash問題。如果我有一個文件一樣......Bash - 逐行打印句子

Today is sunny. I like the sun. It is awesome! 

我想打印出每個字符,直到遇到一個?.,或!。這也可以是一個awk單線程?我想讓打印輸出看起來像。

Today is sunny. 
I like the sun. 
It is awesome! 

回答

1

你只需要指定記錄分隔符:

awk 'BEGIN {RS="[.!?] *"} {print}' 
+0

但這工作!儘管我仍然需要它來打印句子後的這段時間。有沒有辦法通過char來實現,就像char中的print char一樣,然後在發現(。,?或!)時做些什麼? – Tree55Topz

+0

當然,但我不會使用它的awk。 –

2
echo Today is sunny. I like the sun. It is awesome! | sed 's/[.!?] */&\n/g' 
1

一些接近在AWK(不完全想需要的,但有趣的):

echo 'Today is sunny. I like the sun. It is awesome!'|awk '1' RS='[.,?]' 

的規範awk的方式:

echo 'Today is sunny. I like the sun. It is awesome!'|gawk 'a=gensub(/(\.|!|\?) */, "\\1\n", "g"){print a}' 
+0

貝殼高爾夫金牌! – SzG

+0

雖然期間被刪除... – SzG

+0

@SzG預先保存字符,你將需要一個正式的子。看到我編輯的答案。乾杯 – klashxx

1

的解決方案使用sed

sed 's/\([\?\!\.]\)\s*/\1\n/g' 
1
echo Today is sunny. I like the sun. It is awesome! | awk '{gsub(/([?,.!])/,"&\n");print}'