Regex 正则表达式:提取string1和string2之间的字符串,而string2可以是许多字符串中的一个
我得到了多个类似于字典条目的文本文件。一个这样的文本文件可以如下所示:Regex 正则表达式:提取string1和string2之间的字符串,而string2可以是许多字符串中的一个,regex,shell,unix,awk,extract,Regex,Shell,Unix,Awk,Extract,我得到了多个类似于字典条目的文本文件。一个这样的文本文件可以如下所示: MEANING: content1 content2 IDIOM: content3 content4 MEANING: content1 content2 SYNONYMS: content2 content3 content5 另一种可能是这样的: MEANING: content1 content2 IDIOM: content3 content4 MEANING: content1 content2 SYNON
MEANING:
content1
content2
IDIOM:
content3
content4
MEANING:
content1
content2
SYNONYMS:
content2
content3
content5
另一种可能是这样的:
MEANING:
content1
content2
IDIOM:
content3
content4
MEANING:
content1
content2
SYNONYMS:
content2
content3
content5
现在我希望使用一个sed命令行提取“means”部分的内容。
下面是我对第一个文本文件的想法,其中“成语”位于“意思”部分之后:
问题是,输出是:
MEANING:
content1
content2
IDIOM:
content3
然而,这甚至还不起作用,即使用户“Brian Campbell”对此线程中的其他值建议了完全相同的行:
我的第二个问题是对第二个文件执行此操作,其中“同义词”位于“含义”部分之后。从技术上讲,我可以做与上面相同的事情,但是使用“/同义词”而不是“/习语”。然而,这样的事情难道不可能吗
免责声明:它在idea中,语法可能完全错误,我为此提前表示歉意T.T
cat anydicentry.txt | sed -e 's/MEANING\(.*\)\(IDIOM|SYNONYM\)/\1/')
这一行要做的是把“意思”之后的所有内容复制到出现“成语”或“同义词”的地方。然而,我仍然无法让它工作,我不知道如何实现它
我希望你能理解我的两个问题
提前谢谢你们,伙计们 对于像这样逐行处理文件,
awk
是更好的工具,因为awk
是完整的编程语言
awk '/^(IDIOM|SYNONYMS)/{p=0} p; /^MEANING/{p=1}' file
请注意,使用两个输入文件检索相同的输出
说明:
:当行以/^(惯用词|同义词)/{p=0}
或惯用词
开头时,重置标志同义词
p=0
p代码>:当
时,打印每行(默认操作)p==1
:当行以/^means/{p=1}
开头时,设置一个标志means
p=1
sed-e的/meansion\(.*\)IDIOM/\1/'
如果您在一行上有意思,则可以使用IDIOM
<默认情况下,code>sed仅在一行上搜索。很抱歉响应太晚,非常感谢您的回答!有没有一种方法可以用sed代替awk呢?可以用sed
来完成,正如你在Cyrus发布的答案中看到的那样。尽管如您所见,使用awk
更为直接。
content1
content2