簡體   English   中英

sed字符串反向

[英]Sed string reverse

我正在嘗試編寫sed命令來反轉字符串。 例如:如果我輸入“ america”作為輸入,則輸出應為“ acirema”。

請幫忙。

僅供參考:我可以使用Shell腳本(Python腳本)來執行此操作。 但是我無法使用SED做到這一點。

GNU sed手冊中有一個示例:

修訂版

/../! b

# Reverse a line.  Begin embedding the line between two newlines
s/^.*$/\
&\
/

# Move first character at the end.  The regexp matches until
# there are zero or one characters between the markers
tx
:x
s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/
tx

# Remove the newline markers
s/\n//g

像這樣運行它:

echo america | sed -f rev.sed

輸出:

acirema

基本上,這個想法是用換行標記字符串的開始和結束,然后,當換行在字符串中移動時,交換相鄰的字符。

除了GNU sed手冊中的版本以外,如果您不介意分兩個階段進行操作,則可以在非GNU sed中進行。

$ echo Canada | sed $'s/./&\\\n/g' | sed -ne $'x;H;${x;s/\\n//g;p;}'
adanaC

這使用格式替換在腳本中包括換行符。 它的工作方式是先將輸入字符串每個字符分成一行,然后將字符插入保持緩沖區的開頭。

什么? 插入字符?

當然... x交換保留空間和模式空間,abd H將(當前)模式空間附加到保留空間。 因此,對於每個字符,我們將其放置到容納空間中,然后將舊的容納空間附加到其上,從而反轉輸入。

最后的命令刪除換行符以重建原始字符串。

這適用於任何單個字符串,但是它將多行輸入連接為單個輸出字符串。

這可能對您有用(GNU sed):

sed -r 'G;:a;s/^(.)(.*\n)/\2\1/;ta;s/\n//' file

使用默認的保留緩沖區附加換行符。 在換行符后附加/插入第一個非換行符。 重復直到失敗,然后刪除(開頭)換行符。

不需要GNUsed的另一個解決方案:

sed -e 's/^/\
/' -e ':a' -e 's/\n\(.*\)\(.\)/\2\
\1/
ta' -e 's/\n//'

暫無
暫無

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

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