小文字と大文字の内容を含むtemp
ファイルがあります。
入力
temp
ファイルの内容:
hi Jigar GANDHI jiga
すべての上部を下部に変換したい 。
コマンド
次のコマンドを試しました:
sed -e "s/[A-Z]/[a-z]/g" temp
出力が間違っていました。
出力
次のようにします:
hi jigar gandhi jiga
代替部分に必要なものsed
?
コメント
- UTF-8 txtファイルをbashですべて大文字に変換するにはどうすればよいですか?
回答
入力にASCII文字のみが含まれている場合は、次のようにtr
を使用できます。
または(覚えにくく、IMOと入力しにくい;ただし、ASCIIラテン文字に限定されません。ただし、GNU tr
を含む一部の実装では、シングルバイト文字に制限されているため、UTF-8ロケールでは、ASCII文字に制限されています):
tr "[:upper:]" "[:lower:]" < input
sed
を使用する必要がある場合:
sed "s/.*/\L&/g" < input
(ここではGNU実装を想定しています)。
POSIX sed
では、すべての文字変換を指定する必要があります。その後、どれを選択できます。変換する文字:
sed "y/AǼBCΓDEFGH.../aǽbcγdefgh.../" < input
awk
の場合:
awk "{print tolower($0)}" < input
コメント
-
\L
はGNU拡張機能であることに注意してください。 -
\L
はこれまでのところうまく機能しています。 GNU拡張機能 - @JigarGandhiを作成しようとしている点を強調してください。
sed
はUnixコマンドです。システムが異なれば、動作も異なるさまざまなバリアントがあります。 d機能。ありがたいことに、最近では、'が最も準拠している標準があるため、すべてに共通する最小限の機能セットを信頼できます。\L
はその中にはなく、GNUsed
によって導入されました(標準のex
/vi
)であり、通常、他の実装では使用できません。 - GNUなどの一部の
tr
実装に注意してください。tr
マルチバイトロケールでは正しく機能しません(最近はほとんどがecho STÉPHANE | tr '[:upper:]' '[:lower:]'
<を試してください' / div>など)。 GNUシステムでは、sed
バリアントまたはawk
'の
。
sed 's/.*/\L&/g' < input
。一致した部分文字列への\1
参照は、wurtleのように括弧付きの部分文字列を指定しない限り、機能しません'。ただし、'は、図に示すように、&
を使用して一致全体を表す方が少しクリーンです。