疑似命令
perl -pe 'g/^[1-777])/g' data.txt
行の先頭のすべての数字の後に「)」などを1)
追加してみました。67)
777)
すべての質問番号1)
のデータを見つける必要があります(など、...しかしそうではありません)16)
68)
16.
778)
1) hello
A) Options here which should be not matched.
16) hello 16. old
A) Options here which should be not matched.
68) yes question
A) Options here which should be not matched.
...
582) hurray
A) Options here which should be not matched.
778)
A) Options here which should be not matched.
777より前の数字のみを探します。
希望の出力
1,16,68,582,777
その後、Sedコマンドに供給できます。最後に、可能であればこのコマンドの結果を返します(カンマ区切り):、sed -n '1,4,582' full_data.txt
ディスカッションここ、Perlからsedへの一種のパイプですか、それともPerlにありますか?
行の先頭からすべての数字を返す方法は?
答え1
いくつかの明確な反復でわかるように、777より大きくない値を持つ整数のみをカンマ区切りリストに収集する必要があります。ここにあります:
awk -F ')' '$1~/^[0-9]+$/ && $1<=777 {print $1}' <datafile | paste -sd,
注:整数の範囲を一致させるには、次のようにawk
書くこともできます。
awk -F ')' '$1>=1 && $1<=777 {print $1}' <datafile | paste -sd,
以下のバリアントを関連タスクのコンポーネントとして保持します。
作るすべての問題番号:
cut -d ')' -f1 <datafile | paste -sd,
次の出力が生成されます。
1,2,3,...,582
または項目に以下がある場合空の答え(例:777)は考慮しないでください。
awk -F ') ?' '$2!="" {print $1}' <datafile | paste -sd,
または以下がある場合数値限界777 以下を考慮してください。
awk -F ')' '$1<=777 {print $1}' <datafile | paste -sd,
または一致のみ整数最初のフィールドでは:
awk -F ')' '$1~/^[0-9]+$/ {print $1}' <datafile | paste -sd,
答え2
まず、候補者を抽出してから最大777を確認します。
egrep '^[0-7]?[0-9][0-9]?)' file | sed 's/^\([0-7]\?[0-9][0-9]\?\))/\1 )/' | awk '($1 < 778) {print $0}' | sed 's/^\([0-7]\?[0-9][0-9]\?\) ).*/\1,/' | tr --delete \\n | sed 's/,$/\n/'
私のテストファイルで動作します。 (編集1:最後のsedは数字のみを提供します編集2:末尾の削除,
)