[英]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 系統上測試過。 這只是一個猜測。
函數前面可以有一個 '!' 字符,在這種情況下,如果地址未選擇模式空間,則應應用該功能。 '!' 前應接受零個或多個
<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>1
則NR>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.