![sed/awk 来自特定行和列](https://linux22.com/image/179244/sed%2Fawk%20%E6%9D%A5%E8%87%AA%E7%89%B9%E5%AE%9A%E8%A1%8C%E5%92%8C%E5%88%97.png)
我想从第 8 个字符开始打印整个第 2 行
例子:
1234567890
12 45 7foobar
1234567890
输出:
foobar
我尝试sed -n '2p'
打印整个第二行
答案1
使用 sed:
sed -n '2s/.\{7\}//p' file
使用 awk:
awk 'NR==2{print substr($0,8)}' file
答案2
用于cut
仅获取第 8 个字符之后的内容:
$ sed -n "2p" test | cut -c 8-
foobar
答案3
grep
$ grep -zoP '\A(?:.*\n){1}.{7}\K.*' file | tr -d '\0'
$ grep -m2 ^ file | tail -n 1 | cut -c8-
$ grep -Pom2 '.{7}\K.*' file | tail -n 1
Python
$ python3 -c 'print(open("file").read().splitlines()[1][7:])'
珀尔
$ perl -lne 'print(unpack("x7A*")), last if 2..2' file
sed
$ sed -e '
/\n/{s/.$//;q;}
2G;//s/./\n/7;D
' file
bash 内置函数
N=1
while IFS= read -r l; do
case $N in
2)
printf '%s\n' "${l:7}"
break;;
esac
(( N++ ))
done < file
在职的:
grep slurp 文件,跳过第一行,跳过第二行的 7 个字符,并将该行上的剩余字符放入输出包中。
grep 打印 2 个匹配项,即整行,然后抓住尾部,并通过 if cut 方法截断其前 7 个字符。
python 读取文件,将其分成几行,选择第二个,然后打印第 8 个字符。
perl 解包第二行并忽略前 7 个字符,并打印之后的每个字符。
bash 内置函数是不言自明的。
答案4
通过 awk 和 python 两种方法完成
awk 'NR==2{sub(/^.{7}/,"",$0);print $0}' filename
python
#!/usr/bin/python
import re
m=re.compile(r'.{7}')
k=open('filename','r')
j=[]
for i in k:
j.append(i.strip())
print re.sub(m,"",j[1])
输出
foobar