ファイルにnames
「名前」形式の名前のリストが1行に1つずつ含まれているとします。これらの名前はソートされず、性順にソートされることを望みます。ただし、各行の名前形式は同じままにする必要があります。どの一つ次のコマンドはいいえ正しくソートされた名前のリストをコンソールに出力しますか?
[ ]cut -f 2 -d " " names | paste names - | sort -k 3 | cut -f 1
[x]sort -k 2 names
←誤解
[ ]sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
[ ]cut -f 2 -d " " names | sort
[ ]cut -f 2 -d " " names | paste - names | sort | cut -f 2
以下が要求された出力をどのように生成するのか理解できません。
sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
IEは、名前を姓に基づいてアルファベット順にソートしますが、「名前の姓」形式を維持します。\w
職業の次のステップは何ですか*
?ファイル名の後にスペースがあるはずです。これにはどのように\w
適用されますか?
ベストアンサー1
以下はGNUにのみ適用され、sed
BSDsed
の動作は異なります。
いいですね。段階的に見て、次の目的で試してみましょうnames
。
Alice Zylanzy
Zepher Applecart
Michael Copperside
このコマンドを使用し、それがどのように機能するかを段階的に見ていきます。
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names
Zylanzy Alice Zylanzy
Applecart Zepher Applecart
Copperside Michael Copperside
したがって、このsed
コマンドは行の前に繰り返される姓を追加します。その後、簡単な作業を行いますsort
。
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort
Applecart Zepher Applecart
Copperside Michael Copperside
Zylanzy Alice Zylanzy
素敵ですね。これで性別に並べられました。今、私たちがcut
使用したプレフィックスを削除するために使用します。
$ sed 's/\(\w*\) \(\w*\)/\2 \1 \2/' names | sort | cut -f 2-3 -d " "
Zepher Applecart
Michael Copperside
Alice Zylanzy
..彼らが言ったように、ボブはあなたのおじさんです。
雑草の中へどのようにコマンドsed
は動作します: \w
は、「単語文字」を意味する魔法の呪文であり、の略語です/[0-9A-Za-z_]/
。 \w*
ゼロ個以上の「単語文字」を意味し、これが名前がグループ化される方法です。すべての名前に下線や数字がないと仮定すると、次のように書き直すことができます。
sed 's/\([A-Za-z]*\) \([A-Za-z]*\)/\2 \1 \2/' names
sed
コマンド全体のセクションをセクションごとに分類すると、次のようになります。
sedコマンドs
は、「検索と置換」または「交換」コマンドです。最初と2番目のsの間の式は、/
2番目と3番目のs/
の間の式に置き換えられます。
だから私たちはこれを置き換えます:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of \1
' '
( group and capture to \2:
\w* word characters (a-z, A-Z, 0-9, _) (0 or
more times (matching the most amount
possible))
) end of \2
これで:
NODE EXPLANATION
--------------------------------------------------------------------------------
\2 what was matched by capture \2
' '
\1 what was matched by capture \1
' '
\2 what was matched by capture \2