sed/awk 来自特定行和列

sed/awk 来自特定行和列

我想从第 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

相关内容