【发布时间】:2014-10-02 12:28:59
【问题描述】:
是否可以cut 一个不换行的字符串?
printf 'test.test' 打印不带换行符的 test.test。
但如果我用printf 'test.test' | cut -d. -f1 切断输出,test 后面会有一个换行符。
【问题讨论】:
-
当我看到你评论一个更一般的问题时,你最好用你真正想做的事情来更新这个问题。
是否可以cut 一个不换行的字符串?
printf 'test.test' 打印不带换行符的 test.test。
但如果我用printf 'test.test' | cut -d. -f1 切断输出,test 后面会有一个换行符。
【问题讨论】:
有很多方法。除了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【讨论】:
tr -d 上使用$'\n' 吗?对我来说,tr -d '\n' 工作正常。
tr 的实现。我这样做是出于习惯。
tr -d $'\n' 中的$(美元)是什么意思?
tr(Linux 机器上的那个)不需要它,但它可能适用于其他系统。这是一种转义方式,有些程序无法处理反斜杠转义(例如\n、\t 等),因此我们需要以这种方式传递它们。例如,比较echo \n 和echo $'\n'。
$'\n' 是扩展了转义序列的 bash 字符串(以 $' 开头,以 ' 结尾)包含单个换行符 \n。这些字符串就像echo -e 一样工作。或者,可以打开一个普通的 shell 字符串,点击<Enter> 键,然后关闭该字符串,但会不太简洁。
如果你不必使用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 代码中的“%”)。
awk 'NR==3 {printf("WiFi Signal Strength = %.0f%%\n",$3*10/7)}' /proc/net/wireless)
printf "%d", $3*10/7 来获取整数。如果您还可以发布另一个问题,以便isedev 得到他应得的分数。
我不知道。 man cut 很短,没有任何相似之处。
相反,您可以使用here-string 将cut 输出提供给printf,以便新行问题再次取决于printf:
printf '%s' $(cut -d. -f1 <<< "test.test")
【讨论】: