【问题标题】:how to strip out \n from results returned by apk version command如何从 apk version 命令返回的结果中去除 \n
【发布时间】:2016-04-01 20:12:35
【问题描述】:

我正在运行命令:

apk version openssh

输出包括\n。它看起来像这样:

testbox:~# apk version openssh
Installed:                                Available:
openssh-6.8_p1-r5                       < 6.8_p1-r6 
testbox:~# 

我需要一种方法来改变这个输出,使它看起来像这样:

     openssh-6.8_p1-r5 < 6.8_p1-r6 

所以明确地说,我想:

  1. 去掉 \n 字符
  2. 删除所有多余的空格
  3. 删除标题。
  4. 不必保存到文件,只需运行一个命令即可一次完成所有操作。

有没有办法做到这一点?我一直是 grep 的谷歌示例,我尝试用它来尝试摆脱 \n 但还没有成功。

我仍在努力解决这个问题,但如果您有一些建议,我将不胜感激。

编辑 1

我用过 sed,我把它归结为:

testbox:~# apk version openssh | sed 's/Installed://g'| sed 's/Available://g' | sed 's/\n//g'

openssh-6.8_p1-r5                       < 6.8_p1-r6 

如你所见,我试图摆脱换行符的尝试失败了

编辑 2

使用“tr”替换换行符。越来越近。现在我的命令/输出如下所示:

testbox:~# apk version openssh | sed 's/Installed://g'| sed 's/Available://g' | tr '\n' ' '
                                 openssh-6.8_p1-r5                       < 6.8_p1-r6  testbox:~# 

【问题讨论】:

  • awk 甚至sed 在这里会很有用。也许| sed 's/\s+/ /

标签: linux sed grep


【解决方案1】:

管道输出到

... | sed 1d | tr -s ' '

openssh-6.8_p1-r5 < 6.8_p1-r6

sed 1d 删除标题行

tr -s 将字符(在本例中为空格)压缩到一个实例中。

【讨论】:

  • 啊!你的优雅多了!你能告诉我 sed 1d 是做什么的吗?
【解决方案2】:

您要求的one command to do this all at once 是:

apk version openssh | awk 'NR>1{$1=$1;print}'
  • NR&gt;1 跳过第一行(标题)
  • $1=$1 将所有空白链更改为单个空白字符
  • print 打印行

【讨论】:

  • 我猜你是对的!你能帮我看一下吗?
  • 我添加了一个解释。如果您要在 UNIX 上进行任何文本操作,我强烈推荐 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书。
【解决方案3】:

apk 版本 openssh | sed 's/已安装://g'| sed 's/可用://g' | tr '\n' ' ' | sed 's/ *//g'

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多