使用awk从字符串中提取子字符串
Extract substring from a string using awk
我的字符串可以是以下两种格式之一:
dts12931212112 : some random message1 : abc, xyz
nodts : some random message2
我需要从这两个没有 'dts' 部分的字符串中提取子字符串,即它应该 return :
some random message1 : abc, xyz
some random message2
我需要在 bash 脚本中执行此操作。
你能帮我使用 awk 命令吗,它对两种字符串都执行此操作?
通过awk的gsub函数。
$ awk '{gsub(/^[^:]*dts[^:]*:|:[^:]*dts[^:]*/, "")}1' file
some random message1 : abc, xyz
some random message2
$ awk '{gsub(/^[^:]*dts[^:]*:[[:blank:]]*|:[^:]*dts[^:]*/, "")}1' file
some random message1 : abc, xyz
some random message2
您也可以在 sed 中应用相同的正则表达式,但您需要启用 -r
--regexp-extended
参数。
^
断言我们处于起点。 [^:]*
否定字符 class 匹配任何字符但不匹配 :
,零次或多次。所以这个 ^[^:]*dts[^:]*:
将匹配开头包含 dts
的子字符串。如果子串出现在中间,它就不会触及。此 :[^:]*dts[^:]*
模式匹配具有 dts
的中间或最后一个子字符串。最后用空字符串替换匹配的字符将为您提供所需的输出。
更新:
$ awk '{gsub(/^[^[:space:]]*dts[^[:space:]]*[[:space:]:]*|[[:space:]:]*[^[:space:]]*dts[^[:space:]]*/, "")}1' file
some random message1 : abc, xyz
some random message2
这是另一个awk
awk -F" : " '{="";sub(FS,"")}1' OFS=" : " file
some random message1 : abc, xyz
some random message2
仅删除由 :
分隔的第一个字段
另一个版本:
awk -F" : " '{print substr([=11=],index([=11=],))}' file
some random message1 : abc, xyz
some random message2
从第二个字段中获取所有数据并以 :
分隔
我的字符串可以是以下两种格式之一:
dts12931212112 : some random message1 : abc, xyz
nodts : some random message2
我需要从这两个没有 'dts' 部分的字符串中提取子字符串,即它应该 return :
some random message1 : abc, xyz
some random message2
我需要在 bash 脚本中执行此操作。
你能帮我使用 awk 命令吗,它对两种字符串都执行此操作?
通过awk的gsub函数。
$ awk '{gsub(/^[^:]*dts[^:]*:|:[^:]*dts[^:]*/, "")}1' file
some random message1 : abc, xyz
some random message2
$ awk '{gsub(/^[^:]*dts[^:]*:[[:blank:]]*|:[^:]*dts[^:]*/, "")}1' file
some random message1 : abc, xyz
some random message2
您也可以在 sed 中应用相同的正则表达式,但您需要启用 -r
--regexp-extended
参数。
^
断言我们处于起点。 [^:]*
否定字符 class 匹配任何字符但不匹配 :
,零次或多次。所以这个 ^[^:]*dts[^:]*:
将匹配开头包含 dts
的子字符串。如果子串出现在中间,它就不会触及。此 :[^:]*dts[^:]*
模式匹配具有 dts
的中间或最后一个子字符串。最后用空字符串替换匹配的字符将为您提供所需的输出。
更新:
$ awk '{gsub(/^[^[:space:]]*dts[^[:space:]]*[[:space:]:]*|[[:space:]:]*[^[:space:]]*dts[^[:space:]]*/, "")}1' file
some random message1 : abc, xyz
some random message2
这是另一个awk
awk -F" : " '{="";sub(FS,"")}1' OFS=" : " file
some random message1 : abc, xyz
some random message2
仅删除由 :
另一个版本:
awk -F" : " '{print substr([=11=],index([=11=],))}' file
some random message1 : abc, xyz
some random message2
从第二个字段中获取所有数据并以 :