簡體   English   中英

sed 帶特殊字符

[英]sed with special characters

我有這條線,我想在 sed 上使用:

--> ASD = $start ( *.cpp ) <--

其中 $start 不是變量,我想在其上使用 sed 並將所有此行替換為:

ASD = $dsadad ( .cpp ) 

我怎樣才能讓 sed 忽略特殊字符,我嘗試在特殊字符前添加反斜杠,但也許我弄錯了,有人可以給我舉個例子嗎?

這是我想要的:

sed 's/CPPS = \$(shell ls | grep \*\.cpp )/somereplace/' Makefile
sed 's/\$start/\$dsadad/g' your_file
>> ASD = $dsadad ( *.cpp ) 

sed 's/\*//g' your_file
>> ASD = $start ( .cpp ) 

要關注你的編輯:

sed -i 's/ASD = \$start ( \*.cpp )/ASD = \$dsadad ( .cpp )/' somefile
>> ASD = $dsadad ( .cpp )

添加-i(--inplace)以編輯輸入文件。

反斜杠工作正常。 echo '*.cpp' | sed 's/\\*//' echo '*.cpp' | sed 's/\\*//' => .cpp

如果你在shell中,你可能需要雙重轉義$ ,因為它是shell(變量擴展)和sed(行尾)的特殊字符

echo '$.cpp' | sed "s/\\\\$//" echo '$.cpp' | sed "s/\\\\$//"echo '$.cpp' | sed 's/\\$//' echo '$.cpp' | sed 's/\\$//' //'=>'。cpp'

不要逃避() ; 這實際上會使他們成為sed中的特殊(組)。 其他一些常見字符包括[ ] \\ . ?

這是如何逃避你的例子:

sed 's/ASD = \$start ( \*\.cpp )/ASD = $dsadad ( .cpp )/' somefile

chacters $* , . 對於正則表達式是特殊的,因此需要將它們轉義為字面意思。

sed 's/ASD = \$start ( \*\.cpp )/ASD = \$dsadad ( .cpp )/' somefile

我有一個用例,我必須用一個變量替換文本,該變量包含一個特殊符號,例如 (xyz-compute@developer.gserviceaccount.com)。 這個@符號造成了一個問題。 所以我發現這個解決方案很有用。

SERVICE_ACCOUNT="xyz-compute@developer.gserviceaccount.com"
sed -i 's/DEVOPS_SERVICE_ACCOUNT/'${SERVICE_ACCOUNT}'/g' file.txt

暫無
暫無

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

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