4

假设我有一个字符串“123456789”。

我想提取第 3、第 6 和第 8 个元素。我想我可以使用

cut -3, -6, -8

但是,如果这给

368

假设我想用空格将它们分开以获得

3 6 8

我应该怎么办?

4

4 回答 4

2

实际上 shell 参数扩展可以让你直接进行子字符串切片,所以你可以这样做:

x='123456789'
echo "${x:3:1}" "${x:6:1}" "${x:8:1}"

更新

要对整个文件执行此操作,请循环读取该行:

while read x; do
  echo "${x:3:1}" "${x:6:1}" "${x:8:1}"
done < file

(顺便说一句,bash 切片是零索引的,所以如果你想要数字 '3'、'6' 和 '8' 你真的想要${x:2:1} ${x:5:1} and {$x:7:1}。)

于 2013-10-04T02:04:34.197 回答
1

您可以使用sed工具并在终端中发出以下命令:

sed -r "s/^..(.)..(.).(.).*$/\1 \2 \3/"

解释正则表达式:http ://regex101.com/r/fH7zW6


要在文件上“概括”它,您可以cat像这样通过管道传输它:

cat file.txt|sed -r "s/^..(.)..(.).(.).*$/\1 \2 \3/"
于 2013-10-04T02:12:07.270 回答
1

Perl 单行。

perl -lne '@A = split //; print "$A[2] $A[5] $A[7]"' file
于 2013-10-04T03:40:19.863 回答
1

使用cut

$ cat input
1234567890
2345678901
3456789012
4567890123
5678901234
$ cut -b3,6,8 --output-delimiter=" " input
3 6 8
4 7 9
5 8 0
6 9 1
7 0 2

-b选项仅选择指定的字节。可以使用 指定输出分隔符--output-delimiter

于 2013-10-04T05:09:13.857 回答