[笔记]使用shell命令(awk,sed,grep)处理几个特征字符串之间的文本
問(wèn)題一:提取一行文本之中幾個(gè)特征字符串之間的文本。
例:從文本 "/directory1/WantedString/directory2" 中提取"directory1/"和"/directory2"之間的部分,即"WantedString"
1、使用sed
1) 逐步替換,模式:sed -n 's/pattern1//;s/pattern2//;p'
echo "/directory1/WantedString/directory2" | sed -n 's%/directory1/%%;s%/directory2%%;p'2) 引用不想替換的部分,模式:sed -n 's/pattern1\(.*\)pattern2/\1/p' 或 sed -r 's/pattern1(.*)pattern2/\1/g'
echo "/directory1/WantedString/directory2" | sed -n 's%/directory1/\(.*\)/directory2%\1%p'2、使用awk
1) 用特征分隔符分成若干段,輸出第n段。
echo "/directory1/WantedString/directory2" | awk -F "/" '{print $3}'2) 把特征字符串替換掉,輸出剩下的部分。
echo "/directory1/WantedString/directory2" | awk '{gsub("directory[0-9]|/","",$0);print}'3、使用grep
echo "/directory1/WantedString/directory2" | grep -oP "(?<=/directory1/).*(?=/directory2)"如果有更多特征字符串,例如"p1Hellop2,p3Worldp4!"
用awk和sed都可以把"Hello,World!"提取出來(lái),
但grep似乎就不行了。###### ???
?
問(wèn)題二:提取特征字符串所在行之間的文本
例:文件"a.txt"存放文本如下,要求提取出"Hi "和"patterns"之間的文本
Hi I would liketo print text
between these
patterns
1、sed
sed -n '/^Hi/,/patterns/{s/^Hi //;/^patterns/d;p;}' a.txt注釋:"/^Hi/,/patterns/" 取得Hi和patterns之間的行(包括Hi和patterns),然后"s/^Hi //"把"Hi "替換掉,接著"/^patterns/d" 把patterns所在行刪掉,最后打印輸出
2、awk
awk '/patterns/{f=0}/^Hi /{gsub("^Hi ","",$0);f=1}{if(f==1)print}' a.txt awk 'sub(/^Hi /,""){f=1} /patterns/{f=0} f' a.txt注釋:定義一個(gè)flag: f,當(dāng)行有patterns時(shí),f為0,當(dāng)行以"Hi "開頭時(shí),替換掉"Hi "并令f為1,當(dāng)f為1時(shí)打印所在行。
?
參考資料:
http://stackoverflow.com/questions/13023595/sed-awk-print-text-between-patterns-spanned-across-multiple-lines
轉(zhuǎn)載于:https://www.cnblogs.com/zzj99c/p/3682570.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的[笔记]使用shell命令(awk,sed,grep)处理几个特征字符串之间的文本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Chmod 提升一个文件夹下所有文件(夹
- 下一篇: 使用访问控制列表控制用户登录