[英]How to delete leading newline in a string in bash?
我遇到以下问题。 我有一个数字数组:
text="\n1\t2\t3\t4\t5\n6\t7\t8\t9\t0"
我想删除开头的换行符。 我试过了
sed 's/.//' <<< "$text"
cut -c 1- <<< "$text"
和一些迭代。 但是问题在于,这两个命令在每个换行符之后都删除了第一个字符。 结果是:
text="\n\t2\t3\t4\t5\n\t7\t8\t9\t0"
这不是我想要的,这种情况似乎没有答案。
有没有办法告诉这两个命令中的任何一个将换行符(例如字符)和整个字符串视为一个实体?
awk
解救!
awk 'NR>1'
当然,您也可以对tail -n +2
或sed 1d
做同样的操作。
您可能可以使用替换修饰符(请参阅Bash手册中的参数扩展和ANSI C引用 ):
$ text=$'\n1\t2\t3\t4\t5\n6\t7\t8\t9\t0'
$ echo "$text"
1 2 3 4 5
6 7 8 9 0
$ echo "${text/$'\n'/}"
1 2 3 4 5
6 7 8 9 0
$
根据要求,它将用任何内容替换第一条换行符。 但是,请注意,它没有固定在第一个字符上:
$ alt="${text/$'\n'/}"
$ echo "${alt/$'\n'/}"
1 2 3 4 56 7 8 9 0
$
在换行符之前使用插入符号^
并没有帮助-只是意味着没有匹配项。
正如rici在评论中所指出的那样,如果您阅读了我参考的手册页,则可以找到如何以#
前缀开头来锚定模式:
$ echo "${text/#$'\n'/}"
1 2 3 4 5
6 7 8 9 0
$ echo "${alt/#$'\n'/}"
1 2 3 4 5
6 7 8 9 0
$
该符号与其他正则表达式系统没有明显的相似之处。 您只需要知道它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.