假设我有一个字符串“123456789”。
我想提取第3,第6和第8个元素。我想我可以用
cut -3, -6, -8
但如果这给了
368
假设我想用空格分隔它们来获取
3 6 8
我该怎么办?
答案 0 :(得分: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}
。)
答案 1 :(得分:1)
您可以使用sed工具在您的终端中发出此命令:
sed -r "s/^..(.)..(.).(.).*$/\1 \2 \3/"
解释RegEx:http://regex101.com/r/fH7zW6
要在文件上“概括”这个,你可以在cat
之后管道它:
cat file.txt|sed -r "s/^..(.)..(.).(.).*$/\1 \2 \3/"
答案 2 :(得分:1)
Perl one-liner。
perl -lne '@A = split //; print "$A[2] $A[5] $A[7]"' file
答案 3 :(得分: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
指定输出定界符。