替代評論反斜槓我有以下格式的bash一個strign:猛砸怎麼什麼也沒有
//註釋。
我想獲得一個帶有註釋的新變量(無反斜槓),我不想依賴//開始字符串中的前兩個字符。我怎樣才能做到這一點?
我已經試過這樣:
nline=${line/%/////}
echo $nline
要使用字符串替換,但它不工作。
替代評論反斜槓我有以下格式的bash一個strign:猛砸怎麼什麼也沒有
//註釋。
我想獲得一個帶有註釋的新變量(無反斜槓),我不想依賴//開始字符串中的前兩個字符。我怎樣才能做到這一點?
我已經試過這樣:
nline=${line/%/////}
echo $nline
要使用字符串替換,但它不工作。
也許你想#
替代?
$ a='// this is a comment'
$ printf "%s\n" "${a#// }"
this is a comment
$ a='not a comment'
$ printf "%s\n" "${a#// }"
not a comment
而作爲SergA指出的那樣,我們的變量提取好一點的模式可以節省我們下面的sed的解決方案的需求:
$ a="first //a comment"
$ printf "%s" "${a##*//}"
如果你只是想獲得的註釋部分行的任何地方是你可以使用sed
像這樣:
$ a="first //a comment"
$ printf "%s\n" "$a" | sed -e 's,^.*// \?,,'
a comment
這當然你可以在另一個變量存儲:
nline=$(printf "%s" "$a" | sed -e 's,^.*// \?,,')
(還請注意,我從printf
remved的\n
)
謝謝。這工作! – aarelovich
取而代之的是使用'sed',你可以在bash中使用變量綁定:在評論之前獲得所有內容 - 'echo $ {a %% // *}',獲得評論 - 'echo $ {a#* //}' – SergA
@SergA感謝該建議,我把它合併(儘管你的評論在評論前後都使用了相同的示例) –
刪除前兩個字符:
echo ${nline:2}
%
字符串的結尾匹配。 #
匹配字符串的開頭。
既然你說過你不想要那些你不想要%
或#
的人。
此外,您還需要以/
-有限模式轉義/
。
nline=${line/\/\/}
echo "$nline"
這將刪除字符串中的第一個//
無論它在哪裏或之前它會發生什麼。所以foo // comment
將成爲foo comment
等
如果你想刪除也從//
字符串周圍的任何空間,那麼你需要做更多的工作,不能這麼輕易使用字符串替換它。
「依賴//開始前兩個字符」是什麼?請更仔細地重寫你的問題。 :) – reynoldsnlp