在bash变量中用下划线'_'替换换行符

时间:2019-12-05 11:30:17

标签: bash awk sed grep

我知道我可以使用sed(在文件中)使用空格替换换行符

sed ':a;N;$!ba;s/\n/ /g' file.txt

但是如何在bash变量中用下划线'_'替换换行符?

我试图用一个空格代替它进行测试,但是看到我在下面使用的东西却没用。

#gets rid of newline and replace with space to get station name on one line
station=$(
<<<"${station_tmp}"\
echo $station_tmp | sed ':a;N;$!ba;s/\n/ /g' 
)

变量station_tmp如下:

1st line
2nd line
3rd line

我正在尝试用下划线'_'替换换行符,并使其看起来像:

1st line_2nd line_3rd line

我正在使用Ubuntu 18:04 64位linux的PS

4 个答案:

答案 0 :(得分:6)

您可以在bash本身中执行此操作:

var='1st line
2nd line
3rd line'

echo "${var//$'\n'/_}"

1st line_2nd line_3rd line

答案 1 :(得分:4)

请您尝试以下。

echo "$var" | paste -sd_

其中变量值为:

echo "$var"
1st line
2nd line
3rd line

答案 2 :(得分:1)

这可能对您有用(GNU sed和bash):

<<<"$var" sed '1h;1!H;$!d;x;y/\n/_/'

或:

<<<"$var" sed -z 'y/\n/_/'

答案 3 :(得分:1)

这是另一种有效的方法:

awk -v ORS="_" '1' <<<"$var"