假設我的字串如下所示:
$ a='/o\\'
$ echo $a
/o\
$ b='\//\\\\/'
$ echo $b
\//\\/
我想要一個 shell 腳本(最好是單行)來替換/出現的事件,\反之亦然。
假設命令被呼叫invert,它將產生(在 shell 提示符下):
$ invert $a
\o/
$ invert $b
/\\//\
例如使用sed,使用臨時字符似乎是不可避免的,這不是很好,像這樣:
$ echo $a | sed 's#/#%#g' | sed 's#\\#/#g' | sed 's#%#\\#g'
\o/
$ echo $b | sed 's#/#%#g' | sed 's#\\#/#g' | sed 's#%#\\#g'
/\\//\
在某些情況下,這對于正確列印git log --graph --all | tac(我喜歡在底部看到較新的提交)很有用。
uj5u.com熱心網友回復:
tr是你的朋友:
% echo 'abc' | tr ab ba
bac
% echo '/o\' | tr '\\/' '/\\'
\o/
(轉義輸出中的反斜杠可能需要單獨的步驟)
uj5u.com熱心網友回復:
我認為這可以通過 (g)awk 來完成:
$ echo a/\\b\\/c | gawk -F "/" 'BEGIN{ OFS="\\" } { for(i=1;i<=NF;i ) gsub(/\\/,"/",$i); print $0; }'
a\/b/\c
$ echo a\\/b/\\c | gawk -F "/" 'BEGIN{ OFS="\\" } { for(i=1;i<=NF;i ) gsub(/\\/,"/",$i); print $0; }'
a/\b\/c
$
-F "/"這定義了分隔符,輸入將被拆分為“/”,并且不應再包含“/”字符。for(i=1;i<=NF;i ) gsub(/\\/,"/",$i);. 這將在輸入中的所有專案中將反斜杠 (\) 替換為斜杠 (/)。
uj5u.com熱心網友回復:
如果要替換/with的每個實體\,可以使用ysed 的命令,這與執行以下操作非常相似tr:
$ a='/o\'
$ echo "$a"
/o\
$ echo "$a" | sed 'y|/\\|\\/|'
\o/
$ b='\//\\/'
$ echo "$b"
\//\\/
$ echo "$b" | sed 'y|/\\|\\/|'
/\\//\
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526700.html
標籤:壳awksedtr
