我试图用破折号、方括号和冒号分隔符分割以下文本字符串,但将它们保留在方括号中
输入:
10:100 - [10/09/21:12:23:22]
期望的输出:
100, 10/09/21:12:23:22
我当前的代码:
awk -F '[- ":]' '{print $1, $2, $3, $4, $5}'
最佳答案
第一个解决方案:使用 GNU awk
,您可以尝试以下代码。
awk '
match($0,/:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/,arr){
print arr[1],arr[2]
}
' Input_file
第二个解决方案:使用sed
的s
(替换操作)及其捕获组功能尝试以下:
sed -E 's/^[^:]*:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/\1 \2/' Input_file
第三种解决方案:使用任何awk
,您可以使用以下代码。对第一个和最后一个字段使用 sub
和 gsub
操作。
awk '{sub(/.*:/,"",$1);gsub(/^\[|\]$/,"",$NF);print $1,$NF}' Input_file
第四种解决方案:使用 Perl 的单行解决方案使用惰性匹配.*?
,可以尝试使用其替换操作。
perl -pe 's/^.*?:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/\1 \2/' Input_file
关于linux - 如何分割多个分隔符但将它们保留在方括号之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73910518/