ホームページ  >  記事  >  運用・保守  >  Linuxのsedとawkの違いは何ですか

Linuxのsedとawkの違いは何ですか

青灯夜游
青灯夜游オリジナル
2022-05-11 18:38:576705ブラウズ

違い: 1. sed はストリーム エディターであるのに対し、awk はテキスト書式設定ツールおよびレポート ジェネレーターです。2. awk はファイルの抽出と整理に適しており、sed はファイルの編集に適しています。3. sed 読み取り1行のデータは行単位で処理され、awkが行を読み込む際にフィールドに切り分けられ、フィールド(列)単位で詳細な処理が行われます。

Linuxのsedとawkの違いは何ですか

#このチュートリアルの動作環境: CentOS 6 システム、Dell G3 コンピューター。


awk

awk は文書資料を処理するための強力な機能を備えたプログラミング言語です。 awk は、フォーマットされたメッセージや大きなテキスト ファイルからデータを抽出することに優れています。

awk コマンドは、ファイルを 1 行ずつ (最初の行から最後の行まで) スキャンし、ターゲット テキストを含む行を探します。一致した場合、ユーザーの希望する操作がファイル上で実行されます。それ以外の場合、その行に対する処理は行われません。

awk コマンドの基本形式は次のとおりです:

awk [选项] '脚本命令' 文件名

このコマンドで一般的に使用されるオプションとそれぞれの意味を表 1 に示します。

表 1 awk コマンドのオプションとその意味 オプション 意味############ -F fs 入力行の区切り文字として fs を指定します。awk コマンドのデフォルトの区切り文字はスペースまたはタブです。 -f ファイル awk スクリプトの命令をコマンドラインに直接入力するのではなく、スクリプト ファイルから読み取ります。 -v var=val プロセスを実行する前に、変数 var を設定し、そのデバイスに初期値 val を与えます。

awk 的强大之处在于脚本命令,它由 2 部分组成,分别为匹配规则和执行命令,如下所示:

'匹配规则{执行命令}'

这里的匹配规则,和 sed 命令中的 address 部分作用相同,用来指定脚本命令可以作用到文本内容中的具体行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正则表达式指定。另外需要注意的是,整个脚本命令是用单引号('')括起,而其中的执行命令部分需要用大括号({})括起来。

在 awk 程序执行时,如果没有指定执行命令,则默认会把匹配的行输出;如果不指定匹配规则,则默认匹配文本中所有的行。

举个简单的例子:

[root@localhost ~]# awk '/^$/ {print "Blank line"}' test.txt

在此命令中,/^$/ 是一个正则表达式,功能是匹配文本中的空白行,同时可以看到,执行命令使用的是 print 命令,此命令经常会使用,它的作用很简单,就是将指定的文本进行输出。因此,整个命令的功能是,如果 test.txt 有 N 个空白行,那么执行此命令会输出 N 个 Blank line。

sed

sed 命令采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。

sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:

  • 每次仅读取一行内容;

  • 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;

  • 将执行结果输出。

当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。

sed 命令的基本格式如下:

sed [选项] [脚本命令] 文件名

该命令常用的选项及含义,如表 1 所示。

        表 1 sed 命令常用选项及含义
                选项                 含义
                -e 脚本命令                 该选项会将其后跟的脚本命令添加到已有的命令中。
                -f 脚本命令文件                 该选项会将其后文件中的脚本命令添加到已有的命令中。
                -n                 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。
                -i                 此选项会直接修改源文件,要慎用。

成功使用 sed 命令的关键在于掌握各式各样的脚本命令及格式,它能帮你定制编辑文件的规则。

sed和awk的区别

  • sed是流编辑器,而awk是文本格式化工具,报告生成器

    如果文件是格式化的,即由分隔符分为多个域的,优先使用awk

  • awk适合对文件的抽取整理,sed适合对文件的编辑。

  • awk适合按列(域)操作,sed适合按行操作

    sed:每次读入一行来处理的,sed 适合简单的文本替换和搜索,sed读取一行,以行作为单位,进行处理。

    awk:每次读入一行来处理的(同sed),但awk读取一行,切割成字段,以字段(列)为单位,进行细节处理。

相关推荐:《Linux视频教程

以上がLinuxのsedとawkの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。