特定の行と列のsed / awk

特定の行と列のsed / awk

8文字目から2行目全体を印刷したいです。

例:

1234567890
12 45 7foobar
1234567890

出力:

foobar

sed -n '2p'2行目全体を印刷しようとしています。

答え1

sedを使用してください:

sed -n '2s/.\{7\}//p' file

awkを使用してください:

awk 'NR==2{print substr($0,8)}' file

答え2

cut8番目の文字以降の内容のみを取得するために使用されます。

$ 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

バッシュ組み込み関数

N=1
while IFS= read -r l; do
  case $N in
    2)
      printf '%s\n' "${l:7}"
      break;;
  esac
  (( N++ ))
done < file

布材:

  • grep はファイルをフルルック飲み、最初の行をスキップし、2 行目の 7 文字をスキップし、その行の残りの文字を出力パケットに入れます。

  • grepは完全に縮小された2つの一致を印刷し、if cutメソッドを介して尾をつかみ、最初の7文字を切り取ります。

  • Pythonはファイルを読み取り、複数行に分割し、2番目のファイルを選択してから8番目の文字を印刷します。

  • Perlは2行目を解凍し、最初の7文字を無視し、その後の各文字を印刷します。

  • bashの組み込み機能は説明を必要としません。

答え4

awkとPythonの2つの方法で完了しました

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

関連情報