【问题标题】:Replace a newline with underscore '_' in bash variable在 bash 变量中用下划线“_”替换换行符
【发布时间】:2020-06-29 18:17:06
【问题描述】:

我知道我可以使用 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

PS 我用的是 Ubuntu 18:04 64bit linux

【问题讨论】:

  • sed ':a;N;$!ba;s/\n/ /g' &lt;&lt;&lt; "$station_tmp"?
  • 使用纯 Bash,您可以执行 var=${var/^M/_},其中 ^M 键入为 Ctrl-v Ctrl-m
  • @accdias control-M 不是 UNIX 中的换行符 - 它是 \r(回车)而不是 \n(UNIX 中的换行符又名换行符)。
  • @EdMorton,永远正确。 :-)

标签: regex bash awk sed grep


【解决方案1】:

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

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

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

1st line_2nd line_3rd line

【讨论】:

    【解决方案2】:

    请您尝试关注一下。

    echo "$var" | paste -sd_
    

    变量值在哪里:

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

    【讨论】:

      【解决方案3】:

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

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

      或:

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

      【讨论】:

        【解决方案4】:

        这是另一个有效的方法:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 2013-11-08
          • 2016-12-02
          • 2018-05-20
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多