是否可以在没有换行符的情况下截取字符串?
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'
工作得很好。 - fedorquitr
的实现方式。出于习惯,我是这样做的。 - terdontr -d $'\n'
中的 $
(美元符号)是什么意思? - AlikElzin-kilakatr
(Linux机器上的那个)不需要,但其他系统可能需要。这是一种转义方式,有些程序无法处理反斜杠转义(例如\n
、\t
等),因此我们需要以这种方式传递它们。例如,比较echo \n
和echo $'\n'
。 - terdon$'\n'
是Bash字符串,其中转义序列已经展开(以$'
开头,以'
结尾),包含一个单独的换行符\n
。这些字符串的工作方式就像echo -e
一样。或者,您可以打开普通的shell字符串,按下<Enter>
键,然后关闭字符串,但这样会不够简洁。 - Krzysztof Jabłoński如果您不必使用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
的输出) - miuprintf("WiFi 信号强度 = %.0f%%",$3*10/7)
(最后的 %% 对应于 awk 代码中的“%”)。 - isedevawk 'NR==3 {printf("WiFi信号强度 = %.0f%%\n",$3*10/7)}' /proc/net/wireless
) - miuprintf“%d”,$3 * 10/7
来获取整数。如果可以的话,您也可以发布另一个问题,以便为isedev获得应得的积分。 - fedorquiman cut
相当简短,没有体现任何类似的内容。cut
输出与 printf
和一个here-string 一起使用,这样新行问题再次取决于 printf
:printf '%s' $(cut -d. -f1 <<< "test.test")