【问题标题】:how to extract word from {} and print into a new line如何从 {} 中提取单词并打印到新行
【发布时间】:2020-07-30 04:41:14
【问题描述】:

输入文件有如下一行

Line 21800: Value: $${scripts-dir1}part_archive_ret_hist_stg.ksh $${databse-name}
Line 32456: Value: $${log-dir}rollback.ksh $${databse-name}

如何从 {} 中提取单词并在 unix 中打印到新行?

输出应该是这样的

scripts-dir1
databse-name
log-dir
databse-name

【问题讨论】:

  • 抱歉垃圾邮件,不知道答案,只是在这里说我喜欢标题中的错字:D
  • 我在谷歌搜索过类似的命令,找不到任何有效的命令,所以在这里发布

标签: regex unix awk sed grep


【解决方案1】:
$ LINE='Line 21800: Value: $${scripts-dir1}part_archive_ret_hist_stg.ksh $${databse-name}'
$ echo "$LINE"|grep -oP '{\K[\w-]*(?=})'
scripts-dir1
databse-name

实际上你应该用更多的例子来更新你的问题.. 对于 unix,您可以尝试使用 awk,但仅当您每行有两种情况时,以下方法才有效:

$ LINE='Line 21800: Value: $${scripts-dir1}part_archive_ret_hist_stg.ksh 
$ echo $LINE|awk -F "[{}]" '{print $2"\n"$4}'
scripts-dir1
databse-name

【讨论】:

  • grep -oP 不工作 grep: 非法选项 --o grep: 非法选项 -- P OS 是 SunOS
  • 如果每行只有两个 case,可以试试 awk: echo $LINE|awk -F "[{}]" '{print $2"\n"$4}'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多