如何在 UNIX 中的单个命令中搜索多个分隔符位置



我有一个命令"awk -F'[~|^]' 'BEGIN{RS=FS}/*searching string*/{print NR-1}' <<< *user defined string*",它将根据给定的搜索字符串为我提供分隔符计数。 但是,用户定义的字符串没有任何预定义的分隔符。我从堆栈溢出"在awk中使用多个分隔符"的链接中获得了此命令

但是上面的代码仅在分隔符为单个字符时才有效。当我使用"^|"作为分隔符时,它不会将 2 个字符视为单个分隔符。

请根据我的上述陈述找到样本,


输入 : a=姓名^|电话^|联系人^|标题^|地址^|手机号码(分隔符可能会有所不同(
搜索字符串:标题
命令 :awk -F'[~|^]' 'BEGIN{RS=FS}/title/{print NR-1}' <<< $a
输出: 3

所以任何人都可以帮助我如何在上述命令中适应所有分隔符(如 - "~"、"|"、"^"、"^|">

(。

您需要单独定义每个可能的字段分隔符。"|"表示 OR,因此不会将它们组合在一起。相反,您可以使用"\\"(双反斜杠(转义"|"和"^"字符,然后用"|"分隔字符(字段(

a='f1|f2^|f3~f4^f5'
awk -F'\^\||~|\^|\|' '/f1/{print NF-1}' <<< "${a}"
# outputs 4

因此,这将使用"^|","~","^"和"|"作为字段分隔符,匹配字符串"f1",并打印字段数-1。

最新更新