Awk 从具有不同长度/模式的字符串中提取文本

Awk 从具有不同长度/模式的字符串中提取文本,awk,sed,fetch,extract,cut,Awk,Sed,Fetch,Extract,Cut,我想问一下如何从一个字符串中获取TextN,该字符串在TextN之前有不同的长度/模式。切,塞德和awk?举个例子,我很感激 2018/08/09-20:45:50.671483-06359-06359-433191088669655042-004- TextN 2018/08/09-20:45:50.668677-06359-06359-002-006- TextN 2018/08/09-20:45:50.668677-063-063-002-006- TextN 先谢谢你 对不起,**

我想问一下如何从一个字符串中获取TextN,该字符串在TextN之前有不同的长度/模式。切,塞德和awk?举个例子,我很感激

2018/08/09-20:45:50.671483-06359-06359-433191088669655042-004- TextN
2018/08/09-20:45:50.668677-06359-06359-002-006-  TextN
2018/08/09-20:45:50.668677-063-063-002-006-  TextN
先谢谢你


对不起,**是零件代码标签

如果文本用双星包装并且在其他地方不存在

$ awk -F'**' '{print $2}' file

TextN
TextN
TextN
否则,发布一个更具代表性的示例

同时使用
sed

$ sed -E 's/.*\*\*([^*]+)\*\*.*/\1/' file
如果textN中没有空格,如果它是最后一个用空格分隔的字段

$ awk '{print $NF}' file

由于字符、空格具有特殊意义,因此您必须仔细选择示例输入…

要完成@karakfa的
awk
示例,请使用
sed

sed-i-E“s/*\*\*([a-zA-Z]+)\*\*/\1/”

上一个示例仅在您的
TextN
[a-zA-Z]
匹配时有效。您还可以使用更复杂的东西或添加其他字符。如果你不知道那里会有什么角色:

sed-i-E“s/*\*\*(.+)\*\*/\1/”

如果字符串不在文件中,而是环境变量或只是变量:

echo$line | sed-E“s/*\*\*(.+)\*\*/\1/”

请编辑您的Q以显示准确的输入文本、同一文本所需的输出、您尽最大努力解决任何错误消息的准确文本问题。您是否知道
sed's/targStr/replStr/'文件
(其中replStr可以为空,即
s/targStr/'
。除非您的数据包含
*
字符,否则请删除它们,因为它们会使可能需要的regexp复杂化)。祝你好运。如果你只想要行的最后一个字段,请参阅。。您可以使用
-F
选项设置自定义字段分隔符,默认值为空白,这可能适合您……对不起,卡拉卡法。我无意中在TextN周围添加了**。我将探讨你的方法。谢谢,好的。我刚刚意识到在我的日志中,我只需要跳过第一列,然后提取所有文本。这样地。cat logs.txt | awk'{$1=”“;print}