sed - 如何使用带有多个字符分隔符的cut? Unix

标签 sed delimiter cut

我的文件看起来像这样

abc ||| xyz ||| foo bar
hello world ||| spam ham jam ||| blah blah

我想提取一个特定的列,例如我可以做到的:
sed 's/\s|||\s/\\t/g' file | cut -f1

但是还有其他方法吗?

最佳答案

Since | is a valid regex expression, it need to be escaped \\| or put in square brackets [|]



你可以这样做:
awk -F' \\|\\|\\| ' '{print $1}' file

其他一些可行的变体
awk -F' [|][|][|] ' '{print "$1"}' file
awk -F' [|]{3} ' '{print "$1"}' file
awk -F' \\|{3} ' '{print "$1"}' file
awk -F' \\|+ ' '{print "$1"}' file
awk -F' [|]+ ' '{print "$1"}' file

\ as separator does not work well in square brackets, only escaping, and many escape :)


cat file
abc \\\ xyz \\\ foo bar

示例:表达式中的每个\ 4个\,因此总共12个\
awk -F' \\\\\\\\\\\\ ' '{print $2}' file
xyz

要么
awk -F' \\\\{3} ' '{print $2}' file
xyz

或这个,但并不简单
awk -F' [\\\\]{3} ' '{print $2}' file
xyz

awk -F' [\\\\][\\\\][\\\\] ' '{print $2}' file
xyz

关于sed - 如何使用带有多个字符分隔符的cut? Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447324/

相关文章:

linux - 覆盖文件时 sed 权限被拒绝

bash - 使用 sed 格式化 IP

regex - 自定义 `git log` 并在 `@` 处截断作者电子邮件的最简单方法是什么?

java - 如何使用扫描仪从文件中读取一行中的特定字符串?

regex - 使用正则表达式解析 lspci 树

arrays - 捕获 find 的输出。 -print0 到 bash 数组

matlab - 使用 textscan 读取包含一些空值的文件

linux - 在 cut 命令中发送 '%' (linux)

arrays - linux bash 从文件的每一行中剪切第一个单词,将其分配给一个数组并删除重复项

linux - 如何删除字符串输出的前两个单词