You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed/awk单行命令提取第一个-n后的单词(支持有无空格)

# 解决方案

1. 使用sed实现单行命令

sed -E 's/^.*?-n[[:space:]]*([^[:space:]]*).*/\1/;t;s/.*//'

逻辑说明:

  • ^.*?-n[[:space:]]*([^[:space:]]*).*:非贪婪匹配开头到第一个-n的内容,接着匹配-n后0个或多个空格,捕获后续直到下一个空格的所有字符(即目标单词),最后匹配剩余内容
  • \1:替换整个字符串为捕获到的目标单词
  • t:如果前面的替换成功,直接退出sed,避免后续操作
  • s/.*//:如果未匹配到-n,清空输出返回空

2. 使用awk实现单行命令

awk 'match($0, /-n[[:space:]]*([^[:space:]]+)/, arr) {print arr[1]; next} {print ""}'

逻辑说明:

  • match($0, /-n[[:space:]]*([^[:space:]]+)/, arr):匹配第一个-n及其后0个或多个空格,将后续非空格字符捕获到数组arr的第一个元素中
  • 匹配成功则打印捕获内容并跳过后续处理;未匹配则输出空字符串

# 示例验证

逐个测试给出的输入场景:

  • 输入:echo "a -n test-name -bc d-e -fe -ntest" → 输出:test-name
  • 输入:echo "a -bc d-e -fe -ntest-name -ntest" → 输出:test-name
  • 输入:echo "-ntest-name -ntest" → 输出:test-name
  • 输入:echo " -n test-name -n test-n" → 输出:test-name
  • 输入:echo "-na test-name -n test-n" → 输出:test-n
  • 输入:echo "- n-name -nn test" → 输出:n
  • 输入:echo "-a -e -i -o" → 输出:(空)
  • 输入:echo "-an -en --n foo" → 输出:(空)
  • 输入:echo "-nbar" → 输出:bar

内容的提问来源于stack exchange,提问作者jmox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:15:35