【问题标题】:Bash - one-liner echo with delimiterBash - 带分隔符的单行回显
【发布时间】:2015-08-10 20:37:35
【问题描述】:

所以到目前为止我的示例代码如下所示:

#!/bin/bash

mysampletxt="=======\nTest\n-------;----------\nDone Test\n=========="

我希望能够将其回显,使其如下所示:

=======
Test
-------
Some code goes here
More code
----------
Done Test
==========

但问题是,当我尝试使用 AWK、sed 或 IFS 时,它们也使用 \n 作为分隔符,我不希望这种情况发生,因为文本变得一团糟。无论如何我可以将; 作为分隔符并忽略\n

我在看this。但不幸的是,这些解决方案都不适合我。

任何帮助将不胜感激!

编辑:为了进一步澄清:我正在尝试将mysampletxt; 字符拆分为两个。并且能够将拆分文本的第一部分插入一个位置,第二部分插入另一个位置。

【问题讨论】:

  • 用单引号替换双引号,然后回显 $mysampletxt 会发生什么?
  • 顺便说一句,用#!/bin/bash替换!#/bin/bash
  • 您到底想让; 做什么?看起来您有两段单独的文本来包围第三段,但存储在一个变量中。
  • 该;是这些文本之间的分隔符

标签: linux bash ubuntu delimiter csv


【解决方案1】:
echo -e "${mysampletxt%;*}\nSome code goes here\nMore code\n${mysampletxt#*;}"

printf "%b" "${mysampletxt%;*}\nSome code goes here\nMore code\n${mysampletxt#*;}"

【讨论】:

  • 我认为比我的回答要好。我会保留它以防万一它对任何人有用。
  • printf '%b' 方法是两者中更好的——更便携; POSIX echo 不需要支持-e,但printf %b 自 2008 年以来就是 POSIX 的一部分:pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
  • 不是我要找的,我知道那些,但我想做的是把 mysampletxt; 字符分成两部分。并且能够插入分割文本的第一部分一个地方,第二部分到另一个地方..
【解决方案2】:

另一种选择是使用$'...' 定义您的字符串:

$ mysampletxt=$'=======\nTest\n-------;\n----------\nDone Test\n=========='
$ echo "$mysampletxt"
=======
Test
-------;
----------
Done Test
==========

也要做替换:

$ echo "${mysampletxt/;/$'\nSome code goes here\nMore code'}"
=======
Test
-------
Some code goes here
More code
----------
Done Test
==========

【讨论】:

    【解决方案3】:

    如果你可以使用 awk 或 sed 以外的东西(可能有点矫枉过正):

    [ap@localhost ~]$ perl -e 'print "===\n\n---\n\n;"'
    ===
    
    ---
    
    ;[ap@localhost ~]$python -c "print ' ====\n====\n;'"
     ====
    ====
    ;
    

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多