我遇到以下问题。我有一系列数字:
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"
这不是我想要的,似乎不是这种情况的答案。
有没有办法告诉其中任何一个命令将字符和整个字符串等换行视为一个实体?
答案 0 :(得分:1)
$ docker info
Containers: 0
Images: 12
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Backing Filesystem: tmpfs
Dirs: 12
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.1.13-boot2docker
Operating System: Boot2Docker 1.9.1 (TCL 6.4.1); master : cef800b - Fri Nov 20 19:33:59 UTC 2015
CPUs: 1
Total Memory: 996.2 MiB
Name: tensorflow
Debug mode (server): true
File Descriptors: 11
Goroutines: 19
System Time: 2016-01-24T02:54:29.677797424Z
EventsListeners: 0
Init SHA1:
Init Path: /usr/local/bin/docker
Docker Root Dir: /mnt/sda1/var/lib/docker
Labels:
provider=virtualbox
救援!
awk
当然,您也可以使用awk 'NR>1'
或tail -n +2
执行相同操作。
答案 1 :(得分:0)
您可以使用替换修饰符(请参阅Bash手册中的parameter expansion和ANSI C quoting):
$ 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中的comments所指出的,如果您阅读我引用的手册页,您可以找到如何使用#
前缀在开头锚定模式:< / p>
$ 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
$
符号与其他正则表达式系统没有明显的相似之处;你只需知道它。