忍者ブログ

エンジニア初心者の備忘録

エンジニア初心者が躓いたことハマったことを公開します!

文字の変換・削除や、連続する文字の圧縮を行う~プログラム超初心者のためのLinuxコマンド~

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

文字の変換・削除や、連続する文字の圧縮を行う~プログラム超初心者のためのLinuxコマンド~

当社のCTOから出題されるクイズの整理と書き留めを行いたいと思います。

【CTOからの1日1答】 2016/03/23

ファイルtest.txt内の英小文字をすべて英大文字に変更して端末の画面上に出力するコマンドをすべて選択してください。

A. tr [:lower:] [:upper:] < test.txt
B. tr 'a-z' 'A-Z' test.txt
C. tr -f 'a-z' -t 'A-Z' < test.txt
D. tr '[:lower:]' '[:upper:]' < test.txt
E. cat test.txt | tr 'a-z' 'A-Z'


[正解]

A. tr [:lower:] [:upper:] < test.txt
D. tr '[:lower:]' '[:upper:]' < test.txt
E. cat test.txt | tr 'a-z' 'A-Z'

まず、プログラム超初心者はtrコマンドを知らなかったので、

$ tr --help
使用法: tr [オプション]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.

  -c, -C, --complement    use the complement of SET1
  -d, --delete            delete characters in SET1, do not translate
  -s, --squeeze-repeats   replace each input sequence of a repeated character
                            that is listed in SET1 with a single occurrence
                            of that character
  -t, --truncate-set1     first truncate SET1 to length of SET2
      --help     この使い方を表示して終了
      --version  バージョン情報を表示して終了

SET は文字列によって指定します. 多くの場合その文字自身を表現します.
解釈のされ方は以下の通り:

  \NNN            文字の 8 進数表現(1 から 3 個の 8 進数値)
  \\              バックスラッシュ
  \a              ベル
  \b              バックスペース
  \f              フォームフィード
  \n              改行
  \r              復帰
  \t              水平タブ
  \v              垂直タブ
  CHAR1-CHAR2     CHAR1 から CHAR2 までを昇順に展開した文字列
  [CHAR1-CHAR2]   SET1 と SET2 の両方で指定した場合には CHAR1-CHAR2 と同じ
  [CHAR*]         SET2 として, CHAR を SET1 の長さ分展開した文字列
  [CHAR*REPEAT]   CHAR を REPEAT 個展開した文字列, REPEAT の値を 0 から
                      始めた場合には, 8 進数として解釈
  [:alnum:]       全てのアルファベットと数字
  [:alpha:]       全てのアルファベット
  [:blank:]       全ての水平方向空白文字
  [:cntrl:]       全ての制御文字
  [:digit:]       全ての数字
  [:graph:]       全ての表示可能文字, 空白は含まない
  [:lower:]       全ての小文字アルファベット
  [:print:]       全ての表示可能文字, 空白も含む
  [:punct:]       全ての句読点
  [:space:]       全ての水平及び垂直タブ文字
  [:upper:]       全ての大文字アルファベット
  [:xdigit:]      全ての 16 進数数値
  [=CHAR=]        全ての CHAR と等価な文字. 等価クラス

Translation occurs if -d is not given and both SET1 and SET2 appear.
-t may be used only when translating.  SET2 is extended to length of
SET1 by repeating its last character as necessary.  Excess characters
of SET2 are ignored.  Only [:lower:] and [:upper:] are guaranteed to
expand in ascending order; used in SET2 while translating, they may
only be used in pairs to specify case conversion.  -s uses SET1 if not
translating nor deleting; else squeezing uses SET2 and occurs after
translation or deletion.

Report tr bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report tr translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'tr invocation'

trコマンドは、標準入力から読み込んだ文字列を変換・削除し、標準出力に表示するコマンドということが分かりました。
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.
なお、trコマンドとは、
名称は translate または transliterate の略。
『tr (UNIX) - Wikipedia』
それでは、テキストファイルを作って各選択肢を実行してみます。

$ vim test.txt
$ cat test.txt
abcdefg

A. ○
$ tr [:lower:] [:upper:] < test.txt
ABCDEFG

B. ×
$ tr 'a-z' 'A-Z' test.txt
tr: extra operand `test.txt'
詳しくは `tr --help' を実行して下さい.

C. ×
$ tr -f 'a-z' -t 'A-Z' < test.txt
tr: オプションが違います -- 'f'
詳しくは `tr --help' を実行して下さい.

D. ○
$ tr '[:lower:]' '[:upper:]' < test.txt
ABCDEFG

E. ○
$ cat test.txt | tr 'a-z' 'A-Z'
ABCDEFG


BとCが英小文字をすべて英大文字に変更して端末の画面上に出力できない理由は最初の「$ tr --help」より分かります。

B:
trコマンドはファイルを引数に取れません。

SET は文字列によって指定します. 多くの場合その文字自身を表現します.
C:
trコマンドは-fオプションを持ちません。



以上です。


【参考サイト】
『tr - コマンド (プログラム) の説明 - Linux コマンド集 一覧表』
『Linuxコマンド【 tr 】文字の変換や削除 - Linux入門 - Webkaru』
『Linuxコマンド集 - 【 tr 】 文字を一括変換する:ITpro』
PR

コメント

プロフィール

HN:
プラムザ 太郎
性別:
非公開

P R