簡體   English   中英

AIX 的等效 sed linux 命令

[英]Equivalent sed linux command for AIX

我有這種類型的數據:

xxxx aaaaaaaaaaaaaaaaaaa
xxxx bbbbbbbbbbbbbbbbbbb
xxxx ccccccccccccccccccc
xxxx ddddddddddddddddddd
xxxx eeeeeeeeeeeeeeeeeee

我想要這個輸出:

xxxx aaaaaaaaaaaaaaaaaaa
'' bbbbbbbbbbbbbbbbbbb
'' ccccccccccccccccccc
'' ddddddddddddddddddd
'' eeeeeeeeeeeeeeeeeee

在 linux 上我可以這樣做:

sed "1 ! s|xxxx|''|" data.txt

但是當我在 AIX 上嘗試這個時:

sed: 0602-403 1 ! s|xxx|''| is not a recognized function.

你可以幫幫我嗎 ?

我已經很久沒有做過 AIX 了。

為您的 AIX 系統安裝 GNU sed 可能更容易,特別是如果您認為您將大量移植 Linux shell 代碼。

此外,使用 shell 鏈接的兩個 sed 命令可能會起作用,例如:

sed -n "1p" < input
sed -n "2,$ s|xxxx|''|p" < input

請注意,我沒有在 AIX 系統上測試過。 這只是一個猜測。

來自sedPOSIX 規范(添加了重點):

函數前面可以有一個 '!' 字符,在這種情況下,如果地址未選擇模式空間,則應應用該功能。 '!' 前應接受零個或多個<blank>字符特點。 未指定<blank>字符是否可以跟在 '!' 之后字符,並且符合要求的應用程序不應跟隨“!” 帶有<blank>字符的字符。

我懷疑你遇到了這個問題。 GNU sed之間允許有空格,而 AIX sed可能不允許。

使用sed "1!s|xxxx|''|" data.txt sed "1!s|xxxx|''|" data.txt代替,我敢打賭它會起作用。

不過,我確實認為評論中建議的sed "2,$ s/xxxx/''/" data.txt更清楚。

使用awk

$ awk -v q="''" 'NR>1{sub(/xxxx/, q)} 1' ip.txt
xxxx aaaaaaaaaaaaaaaaaaa
'' bbbbbbbbbbbbbbbbbbb
'' ccccccccccccccccccc
'' ddddddddddddddddddd
'' eeeeeeeeeeeeeeeeeee
  • -vq="''"使用值''創建變量q
  • 如果行號大於NR>1NR>1 1
  • sub(/xxxx/, q)用輸入行的q變量的內容替換xxxx
    • 如果你總是需要替換整個第一個字段,你可以在這里使用$1=q而不是sub
  • 1打印輸入行的內容,存在於$0特殊變量中

您可以使用 shell 保存第一行,並在其余部分調用sed

{ IFS= read -r firstline; printf "%s\n" "$firstline"; sed "s|xxxx|''|"; } <input

暫無
暫無

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

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