linux - 如何分割多个分隔符但将它们保留在方括号之间?

标签 linux unix awk

我试图用破折号、方括号和冒号分隔符分割以下文本字符串,但将它们保留在方括号中

输入:

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

第二个解决方案:使用seds(替换操作)及其捕获组功能尝试以下:

sed -E 's/^[^:]*:([^[:space:]]+)[[:space:]]+-[[:space:]]+\[([^]]*)\]/\1 \2/'  Input_file

第三种解决方案:使用任何awk,您可以使用以下代码。对第一个和最后一个字段使用 subgsub 操作。

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/

相关文章:

linux - 使用 sched_setaffinity 固定到核心后如何取消固定线程?

无法设置 POSIX 消息队列属性

regex - 如何在 AWK 中用大括号包围所有空格填充的单词?

bash - 如何在单列中使用 "sed"

php - 如何为我的 Apache2 根目录中的所有文件设置根访问权限?

linux - 给定列表中最新编辑的文件 SHELL

c++ - 如果进程被 SIGKILLed,操作系统(POSIX)是否刷新内存映射文件?

c - 使用 icmp 套接字时是否应该将 id 写入 icmphdr id 字段?

bash - 正确使用 $@

python - 在一行中间拆分时间戳