Haste makes waste

linux-02-正则表达式与管道

Posted on By lijun

1. 标准输入输出

Linux程序中,一般有一个入口和两个出口,分别叫做标准输入,标准输出/标准错误输出。

一般意义的标准输入为keyboard输入,输出为display输出。

2. 重定向( > )

console中,能将标准输出的文字列,通过重定向将其写入到文件中,重定向符号使用>

2.1 输出重定向

$ cd /etc 
$ ls > ~/ls-output 
$ cat ~/ls-output 

2.2 使用cat生成文件

$ cat > cat-output 
Hello 
This is cat redirect. 

(「Ctrl」 D を押すとEOFで終了) 
$ 

3. 标准错误输出

  • 例1,将ls内容定向到指定文件中
$ ls -l tekitou > ls-l-output 
(tekitou というディレクトリ内の詳細出力を ls-l-output にリダイレクト)
ls: cannot access tekitou: そのようなファイルやディレクトリはありません 
(tekitou というディレクトリが見つからなかったというエラーメッセージ) 

  • 例2,将ls的错误内容定向到指定文件中
$ ls -l tekitou 2> ls-l-output 
(エラー出力を ls-l-output にリダイレクト) 

  • 例3,標準出力と標 準エラー出力を 1 つのファイルに出力したい場合、次のように入力します。
$ ls -l tekitou > ls-l-output-second 2>&1 

4. pipe管道(|)

# 将前面的输出,作为后面的输入
$ ls -l /usr/bin | less 

$ ls -l xxx /usr/bin 2>&1 | less 

command A ** →(标准输出)→ **pipe →(标准输入)→**command B **

5. grep命令 (正则表达式)

更多关于正则表示参考正则表达式

通过grep命令,可以在文件中对数据进行查找,也可以使用|grep,对标准输入过来的数据进行查找。

grep [オプション] 検索条件 [指定ファイル] 

1. 关于指定文件,可以是单个文件,也可以是*形式的多个文件。

2. -e 文字列を検索パターンとして扱う。 

3. -i 検索パターンと入力ファイルの双方で、英大文字と小文字の区別を行わない。 

4. -v 検索パターンとマッチしなかった行を選択する。

其中的检索条件,使用的是正则表达式。

記号 意义 例:记号 例:意义
^ 行頭を表す ^a aで始まっている行
$ 行末を表す b$ bで終わっている行
. 任意の一字を意味する a.b aとbの間に1文字入っている
* 直前文字の0回以上の繰り返しを意味する    
[…] ..の中の任意の一字を意味する [ab]ab aもしくはbに続くab(aab,bab)
[^…] ..の文字が含まれないことを意味する [^ab]ab aもしくはbで始まらない(not)で、abが続くもの
\ 正規表現の記号をエスケープする    
  • 例:
$grep^xy /etc/* 
: 
/etc/services:xyplex-mux 173/tcp 
: 
  • 例:
$ grep -i hostname /etc/* 
(/etc ディレクトリにある、大文字または小文字の hostname という文字列を含むファイル) 
/etc/rc.sysinit: HOSTNAME=localhost 
(略) 
/etc/rc.sysinit: # Reset the hostname. 
(略) 

$ grep abc /etc/* | grep -v tcp
(/etc ディレクトリにある、 abc という文字列を含むが tcp という文字列は含まないファイル) 
(略) 
/etc/services:abcvoice-port 3781/udp# ABCvoice server port 
(略) 
  • 例,查询以d结尾的文件或是目录名:
$ ls /usr/bin/ | grep -e d$
    :
    : 
xxd 
yppasswd 
$