sed 處理替換字元中的特殊字元
今天編寫shell程式時遇到了一個關於sed命令的問題。問題簡化如下。
文字檔案1.txt中包含字串[:50]
~/Documents/books/linux/test$:cat 1.txt
[:50]
願意想將[:50]替換為[50:100],指令碼如下:~/Documents/books/linux/test$:cat test.sh
#!/bin/bash
oldstr="[:50]"
newstr="[50:100]"
cat 1.txt | sed -n 's/$oldstr/$newstr/p'
執行./test.sh,結果沒有輸出於是,我上網查詢問題原因,~/Documents/books/linux/test$:./test.sh ~/Documents/books/linux/test$:
1,如何在sed裡使用變數的問題,發現原來是雙引號和單引號引用的區別。
單引號:shell處理命令時,對其中的內容不做任何處理。即此時是引號內的內容是sed命令所定義的格式。
雙引號:shell處理命令時,要對其中的內容進行算術擴充套件。如果想讓shell擴充套件後得到sed命令所要的格式
下面是個簡單的例子
網上總結了四種方案~/Documents/books/linux/test$:name=chen ~/Documents/books/linux/test$:echo '$name' # $當作字元處理 $name ~/Documents/books/linux/test$:echo "$name" # $作為特殊字元處理 chen
1. eval sed 's/$a/$b/' filename
2. sed "s/$a/$b/" filename
3. sed 's/'$a'/'$b'/' filename
4. sed s/$a/$b/ filename
於是我將指令碼中sed中的單引號改為雙引號。
#!/bin/bash
oldstr="[:50]"
newstr="[50:100]"
cat 1.txt | sed -n "s/$oldstr/$newstr/p"
但是輸出的結果卻跟預想的不一樣。結果如下:~/Documents/books/linux/test$:./test.sh
[[50:100]50]
仔細一下,應該跟sed中的正則表示式有關:正則表示式認可的特殊字元有:
. * [ ] ^ $ { } \ + ? | ( )
這些特殊字元中的一個作為文字字元,需要在特殊字元前新增反斜槓字元\ 來轉義它。
得到之前的結果是因為sed中的正則表示式[:50]表示第一個匹配: , 5,0任一字元用[50:100]進行替換。字串[:50]第一個匹配的是:,所以得到[[50:100]50].所以我將oldstr中的[]進行轉義,並且在sed命令選項中加上g進行完全替換。
#!/bin/bash
oldstr="\[:50\]"
newstr="[50:100]"
cat 1.txt | sed -n "s/$oldstr/$newstr/g;p"
則得到我想要的結果:
~/Documents/books/linux/test$:./test.sh
[50:100]
問題解決完畢。相關推薦
sed 處理替換字元中的特殊字元
今天編寫shell程式時遇到了一個關於sed命令的問題。問題簡化如下。 文字檔案1.txt中包含字串[:50] ~/Documents/books/linux/test$:cat 1.txt [:50] 願意想將[:50]替換為[50:100],指令碼如下:~/Docu
MySql模糊查詢中特殊字元處理
MySql的LIKE查詢語句中,有一些特殊的字元,需要轉換後才能搜尋到結果: ':用於包裹搜尋條件,需轉為\'; %:用於代替任意數目的任意字元,需轉換為\%; _:用於代替一個任意字元,需轉換為\_; \:轉義符號,需轉換為\\\\。 以下是一些匹配的舉例。 SELECT * FROM `table`
前後臺互動中特殊字元的處理
一、特殊字元需要做處理1. 單引號 後臺返回的json中包含單引號,可能會引起前端頁面js報錯,可以在前端對單引號進行轉義,或者在後臺進行轉義,再生成json返回到前端。 後臺根據前端傳遞的資料拼接sql時,單引號會導致sql語句報錯,且不推薦直接使用字串進行sq
url中特殊字元被轉義成編碼後如何處理
開發時有時服務端返回的json中包含url,url中可能含有一些特殊字元,這些特殊字元在傳輸的過程中可能會被轉義成編碼。這時候我們拿到手裡要如何轉換回去呢,先看下那些字元可能會被編碼 例: String url = "http://www.baidu.c
mybatis xml中特殊字元處理
出處:http://yaobenzhang.blog.163.com/blog/static/214395113201561523017861/ 1,CDATA區: 它的全稱為character data,以"<![CDATA[ "開始,以" ]]>"
URI 中特殊字元處理
一、問題闡述 今天寫 url 請求時,不管是get 請求還是 post 請求,如果引數中帶有 + % # 等特殊符號,就無法正常獲得引數 具體現象就是 用URL傳引數的時候,用&符號連線,如果某一個引數中含"#$ ^ & * + ="這些符號的時候,在另一個頁面
科大訊飛語音識別時字串中特殊字元的處理
比如口算遊戲: 訊飛會返回:請回答[n2]78+11=? 此時我們要去掉[n2] 可做如下操作 String results = "[n2]78+11=?"; results = results.replaceAll("\\[" + "n2" + "\\]", "");
URL中特殊字元(+?%#&=/)的處理
在url中直接使用一些特殊字元,在伺服器端接收的時候經常出現數據丟失的情況。 那麼哪些字元能夠直接被伺服器識別,哪些有不能呢? 字元“a-z”,”A-Z”,”0-9”,”.”,”-“,”_”,”*”
iOS的Url中特殊字元的轉碼處理
今天在寫程式碼時遇到一個問題,跟伺服器請求唯一的註冊碼時,後需提交資料報錯,後來發現是註冊碼中有特殊字元,雖然POST的資料已經轉碼過,但是仍然有問題 解決方式:NSString *UrlEncodedString(NSString *sourceText) {
encodeURIComponent 處理URL中特殊字元
url引數中特殊字元(如中文,”&”,”/”等)的處理,這些符號需要先經過編碼處理再傳遞到後臺,後臺解碼得到字串 方法1:使用encodeURIComponent()函式引數兩次編碼如下
xml檔案中特殊字元轉義
在使用mybatis/ibatis寫sql時總是忘記特殊轉義表示,在此記錄 左邊為xml特殊符號,右邊是轉義 < <> >& &
C語言中特殊字元含義
字元 中文 英文 說明 \n 換行符 newline \t  
判斷一個數字(字串)中特殊字元的出現次數
第一種方法: (將數字轉化為字串,再)將字串分割為陣列,迴圈判斷陣列的每一項是否為這個字元(以‘1’為例) function patch(num){ var s=num.toString(); var arr = s.spl
Markdown中特殊字元的轉義字元
上次在用Markdown記筆記時,當正文中寫到<PROJECT>_<PATH>_<FILE>_H_時,<>裡的內容顯示顯示不出來,就算用' '也顯示不出來。後想起Markdown支援html語法,這樣的寫法(<>或<\>)與html語法衝
處理string物件中的字元
一、字元操作函式 在cctype標頭檔案中定義了一組標準庫函式處理字元。 下列的函式從屬於名稱空間std。 1、isalnum(c) 當c是字母或數字時為真。 2、isalpha(c) 當c是字母時為真。 3、iscntrl(c) 當c是控制字元時為真。 4、isdigit(c) 當c是數
php去除陣列或字串中特殊字元
去除陣列或是字串中的反斜槓 function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) :
網址URL中特殊字元轉義
字元 URL編碼 空格 %20 & %26 % %25 : %3A | %7C 分析: %253A == %3A == : %257C == % 7C == | %2520 == %20 == 空格
python 替換字串中的字元
import os import re ls = [] lr = [] r = re.compile(r'\jackliu\\') # path = r"C:\Users\jackliu\Deskt
Java處理正則表示式特殊字元轉義
正則需要轉義字元:'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|' 異常現象: java.util.regex.PatternSyntaxException: Dangling
python替換word中的字元
需要安裝模組,win32com 下載地址:http://download.csdn.NET/detail/clean_water/9759816 import win32com.client