在任何内容(文本、数字、表情符号)之后(例如主题标签)的某些字符(引号等)之间进行 grep

grep between some characters (quotes, etc) of after (eg. hashtag) any content (text, numbers, emojis)

基于这个问题:;对于这种情况没有解决方案(当您有特殊字符时)。

这个问题经过深入研究,而不是 this unrelated question 的重复问题,因为所引用的内容并未涵盖所有询问的主题(支持特殊字符和数字;grep 介于 after/before 和 after/before 之间) .

echo "Text and #hashtag" | grep -o '#[[:alpha:]]\+*' | tr -d '"'运行成功,返回#hashtag;这仍然与提到的问题有关...

...关于我自己需要的这个新问题(可能对你有用),这是我的版本,解析双引号之间的文本而不是标签之后:

echo '#first = "Yes"' | grep -o '"[[:alpha:]]\+*"' | tr -d '"' 并且有效,返回 Yes.

然而,当它有一个表情符号或其他字符,如 >/(例如:echo '#first = "✅ Yes"' | grep -o '"[[:alpha:]]\+*"' | tr -d '"')时,它 returns 一个空输出。

它必须支持任何类型的字符(表情符号、html 标签、数字)。

这不仅对解析字符之间有用,而且对字符后也有用(例如解析任何#hashtag 文本)或之前。

多亏了@Aserre的指点,才想出了答案

为了使“在字符之后出现时获取每个文本”和“在引号之间出现时获取每个文本”(grep) 可以处理任何字符,我们必须将 [[:alpha:]] 替换为...

的区块

所以,它是:

echo '#first = "✅ Yes"' | grep -o '"...\+"' | tr -d '"'(获取双引号之间的任何内容)

和:

echo "Text and #hashtag" | grep -o '#...\+' | tr -d '"'(获取主题标签后的任何内容)

更新:

如果你想支持只有 1 个字符的东西(例如 0 到 9 之间的数字),请将 ... 替换为 .(单点)

如问题所示,它适用于:表情符号、字母、数字和其他特殊字符。

双引号之间提取文本的方法是匹配双引号以外的任何字符,双引号之间尽可能匹配

grep -o '"[^"]*"' | tr -d '"'

部分测试用例:

grep -o '"[^"]*"' <<\___here | tr -d '"'
there is "text" between "double quotes"
just one "?" here, "test me!"
any unpaired double quote " will not match 
___here

其中第二个将失败,并显示您自己答案中的当前代码。