【问题标题】:prevent newline in cut command防止 cut 命令中的换行符
【发布时间】:2014-10-02 12:28:59
【问题描述】:

是否可以cut 一个不换行的字符串?

printf 'test.test' 打印不带换行符的 test.test

但如果我用printf 'test.test' | cut -d. -f1 切断输出,test 后面会有一个换行符。

【问题讨论】:

  • 当我看到你评论一个更一般的问题时,你最好用你真正想做的事情来更新这个问题。

标签: linux newline cut


【解决方案1】:

有很多方法。除了isedev 和 fedorqui 的回答,您还可以这样做:

  • perl -ne '/^([^.]+)/ && print $1' <<< "test.test"
  • cut -d. -f1 <<< "test.test" | tr -d $'\n'
  • cut -d. -f1 <<< "test.test" | perl -pe 's/\n//'
  • while read -d. i; do printf "%s" "$i"; done <<< "test.test

【讨论】:

  • 非常全面! +1 有必要在tr -d 上使用$'\n' 吗?对我来说,tr -d '\n' 工作正常。
  • @fedorqui 嗯,显然不是。我想我记得它曾经是,但我可能错了。也许这取决于tr 的实现。我这样做是出于习惯。
  • tr -d $'\n' 中的$(美元)是什么意思?
  • @AlikElzin-kilaka GNU tr(Linux 机器上的那个)不需要它,但它可能适用于其他系统。这是一种转义方式,有些程序无法处理反斜杠转义(例如\n\t 等),因此我们需要以这种方式传递它们。例如,比较echo \necho $'\n'
  • $'\n' 是扩展了转义序列的 bash 字符串(以 $' 开头,以 ' 结尾)包含单个换行符 \n。这些字符串就像echo -e 一样工作。或者,可以打开一个普通的 shell 字符串,点击<Enter> 键,然后关闭该字符串,但会不太简洁。
【解决方案2】:

如果你不必使用cut,你可以使用awk达到同样的效果:

printf 'test.test' | awk -F. '{printf($1)}'

【讨论】:

  • 谢谢!首先我有awk 'NR==3 {printf "WiFi Signal Strength = " $3*10/7}' /proc/net/wireless | cut -d. -f1; printf "%%\n"cut 换行了,所以我要求解决方案。不过,如果有一种更简单的方法可以用一个 awk 命令解决它,我会更喜欢它! (例如awk 'NR==3 {print "WiFi Signal Strength = " $3*10/7 "%"}' /proc/net/wireless 并在一个点后剪切$3*10/7 的输出)
  • 怎么样:printf("WiFi Signal Strength = %.0f%%",$3*10/7)(最后一个 %% 对应于 awk 代码中的“%”)。
  • 你真的应该接受@fedorqui 的回答——它对应于实际发布的问题。我将我的答案发布为仅用于教育目的的可能替代方案。
  • 你是对的!但无论如何:非常感谢!这就是我一直在寻找的。 :)(最终命令:awk 'NR==3 {printf("WiFi Signal Strength = %.0f%%\n",$3*10/7)}' /proc/net/wireless
  • @gummiflummi 你也可以使用printf "%d", $3*10/7 来获取整数。如果您还可以发布另一个问题,以便isedev 得到他应得的分数。
【解决方案3】:

我不知道。 man cut 很短,没有任何相似之处。

相反,您可以使用here-stringcut 输出提供给printf,以便新行问题再次取决于printf

printf '%s' $(cut -d. -f1 <<< "test.test")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多