我有一个网址:
www.google.com/word/word1/word_2/word3/word4
我想用 awk 只打印包含_
特殊字符的单词。有时文件夹层次结构可能会改变:
www.google.com/word/word1/word2/word3/word_4
我正在使用它,但有时文件夹在上面$6
:
folder=$(echo "$url" | awk -F/ '{print $6}')
我需要在/
字符之间打印文件夹名称。
我有一个网址:
www.google.com/word/word1/word_2/word3/word4
我想用 awk 只打印包含_
特殊字符的单词。有时文件夹层次结构可能会改变:
www.google.com/word/word1/word2/word3/word_4
我正在使用它,但有时文件夹在上面$6
:
folder=$(echo "$url" | awk -F/ '{print $6}')
我需要在/
字符之间打印文件夹名称。
像这样的东西......可能有更有效的方法:
我们只是遍历所有字段并检查单词是否包含下划线;如果是,打印这个词。从两个开始,假设域名不变。
想到了一种非迭代的方法:
如果不需要 awk - 这里有一个更优雅的解决方案:
一个简单的解决方案就是:
也就是说,将斜杠更改为换行符,然后打印包含下划线的结果行。
如果除斜杠之外的其他内容也应被视为单词分隔符,请将它们包含在第一个引用的字符串中。或者反过来做,列出任何可以作为单词一部分的内容:
如果使用
zsh
而不是bash
,您可以提取/
包含_
with 的分隔词:无论这些单词可能包含什么字节值,并且不涉及分叉进程或运行外部实用程序,这都会起作用。
${(s[/])url}
s
在 上绘制变量/
。${(M)array:#pattern}
扩展为匹配模式的数组元素M
。我也可以在 中完成
bash
,但是比较麻烦:awk
/perl
如果您有一长串 URL 会更合适,每行一个来自某个文本流/文件。与
perl
: