regex - 仅打印带有大写字母的单词 (Linux)

标签 regex linux awk grep

所以我目前正在读取这个 txt 文件:

Line 961: www-d1.proxy.aol.com - - [01/Aug/1995:00:35:32 -0400] "GET /elv/hot.gif HTTP/1.0" 200 1007
Line 965: www-d1.proxy.aol.com - - [01/Aug/1995:00:35:41 -0400] "GET /elv/PEGASUS/minpeg1.gif HTTP/1.0" 200 1055
Line 966: www-d1.proxy.aol.com - - [01/Aug/1995:00:35:46 -0400] "GET /elv/SCOUT/scout.gif HTTP/1.0" 200 1165
Line 969: www-d1.proxy.aol.com - - [01/Aug/1995:00:35:49 -0400] "GET /elv/DELTA/delta.gif HTTP/1.0" 200 2244
Line 972: www-d1.proxy.aol.com - - [01/Aug/1995:00:35:51 -0400] "GET /elv/ATLAS_CENTAUR/atlas.gif HTTP/1.0" 200 2286
Line 95219: u139.n72.queensu.ca - - [04/Aug/1995:10:40:04 -0400] "GET /elv HTTP/1.0" 302 -
我试图只打印出命令行中的名称(基本上只有大写字母),没有重复。例如:
ATLAS_CENTAUR
DELTA
SCOUT
PEGASUS
到目前为止我的代码:
grep "/elv" ~/spacestation.txt | awk -F/ '{print $5}' | sort -u
实际输出:
1.0" 302
ATLAS_CENTAUR
DELTA
hot.gif HTTP
SCOUT
PEGASUS

最佳答案

您能否尝试仅在 GNU awk 中使用所示示例进行以下、编写和测试? .

your_command | awk '
match($0,/"GET \/[a-zA-Z]+\/[^/]*/){
  val=substr($0,RSTART,RLENGTH)
  sub(/.*\//,"",val)
  if(val!~/[a-z]/){  print val  }
  val=""
}'

关于regex - 仅打印带有大写字母的单词 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64450215/

相关文章:

python - 正则表达式 - 使用 * 和一组字符

php - 获取非数字字符,然后在文本 block 的每一行上编号

regex - 如何在 Notepad++ 中查找和替换括号的内容

javascript - 在 node.js 中输出完整的错误对象

c - Linux 内核 : strncpy_from_user() copying too many bytes

regex - 使用 AWK 将字符串用正斜杠括起来

bash - Awk 搜索并附加来自其他 csv 文件的匹配名称

awk - shell脚本中增加输入变量号

Python正则表达式拆分,任意长度的整数

linux - slim 自动登录问题