Linux 文本替换 字符串替换 221012笔记
Linux 文本替換 字符串替換
用 sed 命令進行文本字符串替換
公式 sed s/被替換/替換/g 或 sed -e s/被替換/替換/g 或 sed --expression s/被替換/替換/g 或 sed --expression=s/被替換/替換/g
-
g 表示全局, 沒有則只替換第一個,
也可以用數字,表示第幾個, s/a/b/2將第2個a換成b -
可加單雙引號或不加 sed "s/被替換/替換/g" 或 sed 's/被替換/替換/g'
在有特殊字符時,必須加單雙引號
例如- 在有 空格或;分號等情況下,要加用 單'或雙" 引號
- 在有$等字符的情況下, 必須,只能加 ' 單引號
-
可加-e空格 或--expression空格 或 -expression=不加空格
例如替換所有 a 為 B
sed s/a/B/g等效 sed 's/a/B/g'等效 sed "s/a/B/g"
等效 sed -e s/a/B/g 等效 sed --expression s/a/B/g等效 sed --expression=s/a/B/g
等效 sed -e 's/a/B/g' 等效 sed --expression "s/a/B/g"等效 sed --expression='s/a/B/g' -
如果有多個腳本(expression/scripts), 則必須加-e或--expression 或者用大括號(花括號){}包裹,以分號分隔
echo aaaaaaaaa | sed -e s/a/b/g -e "s/b/c/g" -e 's/c/d/g' -e s/d/e/g --expression s/e/E/g --expression "s/E/D/g" --expression 's/D/C/g' --expression=s/C/B/g --expression='s/B/A/g' echo aaaaaaaaa | sed '{s/a/b/g; ; ; ; ;s/b/c/g;s/c/d/g;s/d/e/g;;;s/e/E/g;;s/E/D/g;;s/D/C/g;s/C/B/g;s/B/A/g; }'
例如先將 a換b, 再 b換c , c換d , d換e , e換E , E換D , D換C , C換B , B換A
sed -e s/a/b/g -e "s/b/c/g" -e 's/c/d/g' -e s/d/e/g --expression s/e/E/g --expression "s/E/D/g" --expression 's/D/C/g' --expression=s/C/B/g --expression='s/B/A/g'
測試如果不帶g則只替換第一個
echo aaaaaaaaa | sed -e s/a/b/ -e "s/b/c/" -e 's/c/d/' -e s/d/e/ --expression s/e/E/ --expression "s/E/D/" --expression 's/D/C/' --expression=s/C/B/ --expression='s/B/A/' -
要想刪除指定字符串的話, 就將替換內容設為空
echo abcabcabcdefg | sed s/abc//g
例如:
刪除所有 abc : sed s/abc//g刪除第一個 abc : sed s/abc//
echo abcabcabcdefg | sed s/abc// -
大括號{}(花括號) 用來包裹多個命令,用分號;分隔 {命令1;命令2;命令3;...}
- 當大括號內只有一個命令時, 可以不加引號
- 當大括號內有多個命令,用分號;分隔時, 必須加 單或雙 引號echo aaa | sed "{s/a/A/;s/aa/B/}" # 得到 AB 也可有空格echo aaa | sed " { s/a/A/ ; s/aa/B/ } " # 得到 AB echo aaaaaaaaa | sed '{s/a/b/g; ; ; ; ;s/b/c/g;s/c/d/g;s/d/e/g;;;s/e/E/g;;s/E/D/g;;s/D/C/g;s/C/B/g;s/B/A/g; }'
用sed修改來自文件的內容
公式: sed s/被替換/替換/g 文件 , 文件必須放在最后
例如: 替換來自文件中的 aaa 變 BBB
加 -i 或 --in-place 選項, 就會對文件進行修改
-i[SUFFIX], --in-place[=SUFFIX]
-i 或 --in-place 選項后如果有后綴, 就會以文件名加后綴給文件做個備份, 再修改
-i與后綴緊連,沒有空格, 如-i.bak
--in-place 與后綴通過等號=連接 , 如 --in-place=.bak
用sed修改來自變量的內容
echo默認會加換行, 加上-n,可不換行 , 也可以用printf
-echo $變量屏幕輸出時,會將連續空格合并為一個, 可以用echo "$變量"原樣輸出
printf $變量輸出時,變空格會變成參數分隔, 所以加雙引號 printf "$變量"
例子:
v='hello World' ; echo "$v";\ v=`echo -n "$v" | sed s/h/H/`; echo "${v}" v='Helloorld' ; echo "$v";\ v=`echo "$v" | sed 's/oo/o Wo/'`; echo "${v}" v='World' ; echo "$v";\ v=`printf "$v" | sed 's/^/Hello /'`; echo "${v}" v='Hello' ; echo "$v";\ v=`printf "$v" | sed 's/$/ World/'`; printf "${v}\n" v='Hello' ; echo "$v";\ v=`printf "$v" | sed 's/$/\ \ \ \ \ \ World/'`; printf "${v}\n" v='H o W d' ; echo "$v";\ v=`printf "$v" | sed '{s/ /ell/ ; s/ /orl/}'`; printf "${v}\n" v='H o W d' ; echo "$v";\ v=`printf "$v" | sed '{\ s/ /l/7 ;\ s/ /r/6 ;\ s/ /o/5 ;\ s/ /l/3;\ s/ /l/2;\ s/ /e/1;\ }'`; printf "${v}\n"例如移除環境變量PATH中的指定字符串
export PATH=` printf "$PATH" | sed ' s/:\.//g ' ` ; echo "$PATH"; export PATH=` printf "$PATH" | sed ' s/:\/MyBashs//g ' ` ; echo "$PATH";總結
以上是生活随笔為你收集整理的Linux 文本替换 字符串替换 221012笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复旦大学2018--2019学年第二学期
- 下一篇: 20200717——python 复习