今天遇到個需求需要替換字符,本來在SQL里做,但是想嘗試一下sed,把過程記錄一下
需求是把下面的文本
(1796208919349287,2592294224942165,1527446512828944,'abc','<a href=\'/users/7310739222965755\'>@xxd</a> Hello World!',(2027149921324245,1612506768201878,2155431015165304,'def','<a href=\'/users/1696908528085920\'>@xyz</a> Would you like to.....?'........
替換成
(1796208919349287,2592294224942165,1527446512828944,'abc','@xxd Hello World!',(2027149921324245,1612506768201878,2155431015165304,'def','@xyz Would you like to.....?'........
其實重點就是把<a href=\'/users/7310739222965755\'> </a>這兩部分去掉
最終的命令是這樣的
sed -e 's/<a href=\\'\''\/users\/[[:digit:]]\{16\}\\'\''>/ /g' \
-e 's/<\/a>/ /g' \
file.sql
讓我們把命令拆開看
's/<a href=\\'\''\/users\/[[:digit:]]\{16\}\\'\''>/ /g' \
\\第一個\是后一個\的轉譯
'\''
在shell下在單引號內的單引號轉譯需要用'\''
[[:digit:]]\{16\}
任意的16位數字
\\
再一次轉譯\
'\''
再一次轉譯'
--EOF--