簡體   English   中英

使用sed,awk等分隔中間點字符

[英]Using sed, awk, etc. to separate after middle dot characters

我可以用你的幫助; 我保證我努力尋找答案,但沒有運氣。

我想在每次出現“·”(中間點)字符(基本上是音節)之間分隔文本。

echo con·grat·u·late | sed -e 's/·.*$/·/1'

上面的代碼輸出:

CON·

這是我想要的第一部分,但最終我想要一個輸出:

CON·
GRAT·

晚的

這將涉及獲取“·”的第1至第2次和第2次至第3次之間的字符

如果有人能指引我朝着正確的方向前進,我將非常感激,並且我會自己完成其余的工作。

編輯道歉,我錯誤地顯示了我想要的輸出。 但是,您的解決方案非常有用。

由於將所有內容保存為單行非常重要,如何在第一個點和第二個點之間輸出文本,以輸出:

grat·

我在UTF-8,Jonathan這樣做

再一次,抱歉找錯了。

在GNU sed中,您可以這樣做:

echo con·grat·u·late | sed -e 's/·/&\n/g'

&代表匹配的模式,在這個例子中是· 不幸的是,這在BSD sed中不起作用。

對於更便攜的解決方案,我推薦這個AWK,它應該適用於GNU和BSD系統:

echo con·grat·u·late | awk '{ gsub("·", "&\n") } 1'

由於您希望在點之間運行字符,因此您可以像這樣嘗試sed

echo 'con.grat.u.late'|sed 's/\.*\./&\n/g'|sed  -n 2p|tr -d '.'

在第1和第2點之間打印字符組

echo 'con.grat.u.late'|sed 's/\.*\./&\n/g'|sed  -n 2p|tr -d '.'

結果

grat

注意:我使用2p在第一個點和第二個點之間打印字符

打印第2點和第3點之間的字符組

echo 'con.grat.u.late'|sed 's/\.*\./&\n/g'|sed  -n 3p|tr -d '.'

結果

u

注意:我使用3p在第二個點和第三個點之間打印字符

你也可以使用sed完成整個過程,但是我使用tr命令,這樣你就可以輕松地遵循了。 tr命令在打印前刪除點。 如果你想要點,那么排除|tr -d '.' 從命令行。

您還可以打印一組字符

echo 'con.grat.u.late'|sed 's/\.*\./&\n/g'|sed  -n 1,3p|tr -d '.'

結果

con
grat
u

您可以使用簡單的awk將這些單詞分開:

$ echo 'con.grat.u.late' | awk -F. '{print $1}'
con
$ echo 'con.grat.u.late' | awk -F. '{print $2}'
grat
$ echo 'con.grat.u.late' | awk -F. '{print $3}'
u
$ echo 'con.grat.u.late' | awk -F. '{print $4}'
late

$ echo 'con.grat.u.late' | awk -F. '{for(i=1;i<=NF;i++){print $i}}' 
con
grat
u
late

-F. 暗示使用. 作為字段分隔符

只是

echo con·grat·u·late | sed -e 's/·/·\n/g'

替換每··跟着一個換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM