regex - 之后抓取一个单词和可变数量的字符
问题描述
我有一个TAB
包含长字符串的单独文件,我打算将8th column
其随机过滤包含字母和字符的混合文件,以仅包含“ ;OCCURRENCE=some words|
”部分,如下所示:
输入.txt
1 138440 CAMEL C T . . MANY-WORDS-AND-CHARACTERS(*/-;|\);OCCURRENCE=HOY-BR|MANY-WORDS-AnD-CHARACTeRS(;*/-|\)
1 138440 CAT CD TGGD . . MANY-WORDS-AND-CHARACTERS(;*/-|\);OCCURRENCE=DISC-BF5R|MANY-WORDS-AnD-CHARACTeRS(*/-|\;)
预期输出.txt:
1 138440 CAMEL C T . . ;OCCURRENCE=HOY-BR|
1 138440 CAT CD TGGD . . ;OCCURRENCE=DISC-BF5R|
我试图“清理”直到带有字符串8th column
的半列出现,但它会擦除其他列,所以它不起作用。OCCUR
sed 's/.*;OCCUR//g'
如何;OCCURANCE=whatever-word|
在不擦除其他列的情况下将模式保留在第 8 列?
解决方案
对于 GNU sed,确切地说:
$ sed -E 's/((\S+\s){7}).*(\;OCCURRENCE=[^\|]*\|).*/\1\3/' input.txt
1 138440 CAMEL C T . . ;OCCURRENCE=HOY-BR|
1 138440 CAT CD TGGD . . ;OCCURRENCE=DISC-BF5R|
因此,无论是TAB
空格分隔还是空格分隔,都请根据您的描述过滤第 8 列。
\S
表示非空白字符。
\s
表示空白字符。
+
表示字符/组出现一次或多次。
{7}
表示角色/组出现 7 次。
[^\|]
表示任何不是|
.
\num
表示num
捕获()
的内容。
检查正则表达式以获取更多信息。
推荐阅读
- swift - 在 Swift for mac 中访问用户环境变量
- python - 一个洗牌然后解洗python列表的好方法
- javascript - 如何使用“加法混合”以外的混合模式使不透明度影响材质
- python - 在python中,GC如何处理mmap?
- regex - 正则表达式在 Atom 或 Sublime 中查找用乘数替换
- python - script-write dict 并将其写入文件然后加载
- java - 如何在 Eclipse 下获取 Java 应用程序的 JVM Monitor CPU 统计信息?
- javascript - for循环数组中的所有数字都需要显示
- c# - 如何将数据绑定到xamarin中的stacklayout
- java - 为什么这个Java小程序会让MacOS重启?