我需要从只打印“[PR:]
”的 [PR:Parker]
中删除 ParkerS
注意:[PR:xxxxxxx] "xxxxxxx" 部分会不时更改。
到目前为止,我已经创建了以下 sed 命令:
sed 's/[PR:]//g' | sed 's/[][]//g'
但它打印的“arkerS
”也缺少名称中的“P
”。
答案 0 :(得分:4)
第一个解决方案:使用 awk
,使用您显示的示例,请尝试一次以下代码。使用 gsub
函数全局替换起始 [
后跟 PR:
和 ]
以 NULL 结尾并打印行的其余值。
awk '{gsub(/^\[PR:|\]$/,"")} 1' Input_file
第二个解决方案:在 awk
代码中使用不同的字段分隔符来根据显示的示例获取倒数第二个值,请尝试以下操作。
awk -F':|\\]' '{print $(NF-1)}' Input_file
第三种解决方案: 使用 match
的 awk
函数尝试以下操作。匹配正则表达式 /:[^]]*/
从 :
的第 1 次出现到 ]
出现之前,并仅根据要求打印匹配的部分。
awk 'match($0,/:[^]]*/){print substr($0,RSTART+1,RLENGTH-1)}' Input_file
第四个解决方案: 在这里使用参数扩展的bash功能。如果您在 shell 变量中有这个值,那么这将是最佳解决方案。
##If your shown sample is in a shell variable, use parameter expansion then.
var="[PR:Parker]"
##Create interim variable var1 to remove everything from starting till : here.
var1="${var##*:}"
echo "$var1"
Parker]
##Then on var1 remove ] and get needed value here.
echo "${var1%*]}"
Parker
第五个解决方案: 使用 perl
one liner try follow,执行全局替换以删除开头的 [PR:
和结尾的 ]
空。
perl -pe 's/^\[PR:|\]$//g' Input_file
答案 1 :(得分:2)
你可以使用
sed 's/\[PR:\([^][]*\)]/\1/' <<< "[PR:Parker]"
这里,\[PR:\([^][]*\)]
匹配 [PR:
,然后除 [
和 ]
之外的任何零个或多个字符都被捕获到组 1 中,]
是匹配,并且匹配被替换为组 1 值(带有 \1
占位符)。
或者,
sed -E 's/\[PR:|]//g' <<< "[PR:Parker]"
参见online demo。此处,\[PR:|]
匹配 [PR:
或 ]
,s
命令删除它们。