使用带有 pling/感叹号的 cut 作为分隔符

sni*_*im2 3 shell quoting cut

在shell(不是Bash)中,我有一个这样的字符串,我想解析:

stringhere/morestring!99
Run Code Online (Sandbox Code Playgroud)

解析后,我想保留99在最后,并扔掉字符串的其余部分。

需要保留的子串不会总是两个字符长。它将是一个或多个数字,从!到 字符串的末尾,或 a ,。

示例输入/输出:

In: stringhere/morestring!99
Out: 99

In: string/more!99,string/more!98,string/more!97
Out: 99
Run Code Online (Sandbox Code Playgroud)

cut听起来很明显,除了!在字符串的中间。

是否有捷径可寻?会awk更好吗?

rAl*_*len 10

如果该字符串在 FILE 中,并且您总是只想要第一个之后!和之前的第一个数字,,如果它存在,这应该可以工作

awk -F'[!,]' '{print$2}' FILE
Run Code Online (Sandbox Code Playgroud)

它采用!或,作为分隔符并显示第二个字段,如果该行中没有,则该字段将是!和,或之后的第一个数字,或者在它之前。! ,

如果,之前有第一个!上层 awk 示例是不适用的。

您也可以将一个cut命令通过管道传输到另一个命令,首先您指定!为分隔符并在第一个之后获取内容!,第二个您指定,为分隔符并在第一个之前获取内容(,如果存在)

cut -d'!' -f2 FILE | cut -d',' -f1
Run Code Online (Sandbox Code Playgroud)

  • awk 还会从诸如 `one,77,two!99` 或 `three,77!99` 之类的数据中获取 77。FS 模式中元素的顺序并不重要。 (6认同)