2015-11-09 90 views
0

替代評論反斜槓我有以下格式的bash一個strign:猛砸怎麼什麼也沒有

//註釋。

我想獲得一個帶有註釋的新變量(無反斜槓),我不想依賴//開始字符串中的前兩個字符。我怎樣才能做到這一點?

我已經試過這樣:

nline=${line/%/////} 
    echo $nline 

要使用字符串替換,但它不工作。

+1

「依賴//開始前兩個字符」是什麼?請更仔細地重寫你的問題。 :) – reynoldsnlp

回答

3

也許你想#替代?

$ 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

+0

謝謝。這工作! – aarelovich

+0

取而代之的是使用'sed',你可以在bash中使用變量綁定:在評論之前獲得所有內容 - 'echo $ {a %% // *}',獲得評論 - 'echo $ {a#* //}' – SergA

+0

@SergA感謝該建議,我把它合併(儘管你的評論在評論前後都使用了相同的示例) –

0

刪除前兩個字符:

echo ${nline:2} 
+1

OP表示假設'// //是前兩個字符是不可取的。 –

+0

是的,這是一個無條件的變種 – SergA

+1

對,它顯式*不是對OP問的問題的答案。 –

0

%字符串的結尾匹配。 #匹配字符串的開頭。

既然你說過你不想要那些你不想要%#的人。

此外,您還需要以/-有限模式轉義/

nline=${line/\/\/} 
echo "$nline" 

這將刪除字符串中的第一個//無論它在哪裏或之前它會發生什麼。所以foo // comment將成爲foo comment

如果你想刪除也從//字符串周圍的任何空間,那麼你需要做更多的工作,不能這麼輕易使用字符串替換它。