特定のポイントから特定の文字を読む

特定のポイントから特定の文字を読む

次のようなファイルがあるとしましょう。

foo bar foo bar foo bar foo bar something useful"foo bar foo bar"

something useful基本的に文字列を個別に取得する方法、独自のファイルに保存する方法、または個別に出力として表示する方法を知りたいです。

something useful(33)前後には"常に同じ数の文字があります。

答え1

この試み:

cut -c 34- | cut -d '"' -f1

最初のものはcut最初の33文字を削除し、2番目はcut最初の文字です"

答え2

これはgrepPerl構文を使用するGNUバージョンです。

grep -oP '.{32}\K[^"]*'

最初の32文字を特定して削除\Kし、最初の文字まで残りの文字を印刷します"

答え3

Bashおよびパラメータ拡張式

$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}"   #print everything from offset 32 to the end

答え4

sedを使用して操作を実行できます

sed -e 's/^.\{32\}//;s/".*//' filename.txt

これにより、最初の32文字が削除され、最初の文字以降のすべての文字が削除されます"

これらの置換はファイルのすべての行で発生します。特定の行に適用するには、次のようにします。

sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt

linenumberランダムな数字はどこにありますか?

linenumber{          # on the linenumber-th line, do the following
 s/^.\{32\}//        #  remove the first 33 characters
 s/".*//             #  remove the first quote and everything following it
}

関連情報