sed
使用するのは簡単広く使用されるコマンドは、高速なテキスト処理のためのツールです。これは、ハードスキルに属し、最も適切なチャネルを、使用することを学んで、実際には多くのスキル、朗読ではありません。しかし、それはあまりにも多くの高度な機能ので、非常に複雑です。Benpianは、SED、唯一のいくつかの一般的な操作の高度な機能を心配説明されていません。
使用すると、あなたはそれを見つけるだろうし、vim
いくつかのアイデアがで考え出している、正規表現の構文は基本的に同じではなく、多くの学習コストです。ビューの個人的な視点と効率の点からは、sedコマンドは、プログラマが習得しなければならないための重要なツールです。
ゆっくり兵主にExcelにテキストをコピーするために使用は、Googleサイトを使用することができると言う人たちは、、混乱している文書を大量に発生しました。いない人は、ドアに、この記事はあなたのために書かれていませんではありません。
シンプルなエントリー
示されているように、単純なsedコマンドは、3つの主要部分を含みます:参数
、范围
、操作
。操作するファイル、直接、最後のコマンドラインにリンクすることができます。コマンドラインに加えて、sedの-fパラメータはまた、sedスクリプトで指定することができ、これは、高度な使用方法である、あまりにも多くの説明をしません。
私はあなたがどこ法を見つけるのは確実だ、時には説明する必要がないよう、スマート、コマンドを数回繰り返します例の一部。
パラメータ
-n このパラメータである--quiet
か--silent
を意味します。ショーは、当社の業績に実装プロセス出力、出力を無視します。
私たちは、別の引数があります使用しました:-i
。
このパラメータを使用した後、すべての変更は、元のファイルに実行されます。あなたの出力は、元のファイルが上書きされます。 非常に危険な 、我々は注意を払う必要があります。
スコープ
1,4は 1,2,3,4のラインを見つけるために、ファイルの内容を表しています。
この範囲は非常に精神的な指定され、次の例(図自体であるいは範囲部分)を考えます。
5 行5を選択します。2,5 2-5行、4行を選択。
1-2は 奇数行を選択します。
2〜2は 偶数行を選択します。
2、+ 3 、及び
2,5
効果は、4行の合計と同じです。2、$ ファイルの末尾に二行目から。
オプションの範囲は、通常の試合を使用することができます。次の例を考えてみましょう。
/ SYS /、+ 3 行選択SYS単語が表示され、後者の3本のライン。/ ^ SYS /、/ MEM / 単語が表示されるMEM間のsys行を始まる名前、およびデータ線を選択。
例示のために、次のコマンドは、説明以上の動作範囲に対応し、空間が存在する可能性があること。
sed -n '5p' file
sed -n '2,5 p' file
sed -n '1~2 p' file
sed -n '2~2 p' file
sed -n '2,+3p' file sed -n '2,$ p' file sed -n '/sys/,+3 p' file sed -n '/^sys/,/mem/p' file
オペレーティング
最も一般的な操作は、p
その印刷を意味します。たとえば、次の2つのコマンドは同等です:
cat file
sed -n 'p' file
印刷だけでなく、私たちに共通する次のように加えて。
p個の コンテンツが印刷するマッチング。D コンテンツマッチを削除します。今回は取り除く必要がある
-n
パラメータ、およびその理由を考えます。wの 内容他の場所と一致するように書かれています。
a
、i
、c
およびその他の操作は、基本的なもののあまりで、説明していません。我々はまだいくつかのコマンドを説明してもらいます。
sed -n '2,5 p' file
sed '2,5 d' file
sed -n '2,5 w output.txt' file
のは、いくつかの可能sedコマンド、コマンドポイントの経験が何であるかを見てみましょう。
#と空白行で始まるすべての行を削除します。
sed -e 's/#.*//' -e '/^$/ d' file
最も一般的に以下のような、使用します。
sed -n '2p' /etc/group
第2のライン群は、印刷ファイルを表します。
1、参数部分 比如 -n
2、模式部分 比如'2p'
3、文件,比如/etc/group
まあ、私はsedを一度に複数のコマンドは、実行する方法スクリプトファイルを書きたくないと思いますか?これは、-eパラメータを追加する必要があります。
sedの操作単位です行
。
置換モード
これらはsed
、パターンにマッチする、一般的に使用されるコマンドが、それはまた、検索とは、これらの値の一部を置き換えることを意味し、強力な代替モードを持ち、その結果を出力します。置換モードほとんど使用されません使用し-n
たパラメータを。
パラメータ置換もう少しパターンが、第1の部分と第五部分を省略することができるされています。それは置き換えられます全体のテキスト出力を行います。
範囲の最初の半分の数、および代替動作実行の後半に一致します。
スコープ
同様の上記の構文の範囲と範囲。以下の例を参照してください。
/ SYS /、+ 3 行選択SYS単語が表示され、後者の3本のライン。/ ^ SYS /、/ MEM / 単語が表示されるMEM間のsys行を始まる名前、およびデータ線を選択。
具体的なコマンドは次のとおりです。
sed '/sys/,+3 s/a/b/g' file
sed '/^sys/,/mem/s/a/b/g' file
コマンド
ここにコマンドがsです。これは、代替の意味です。
マッチを探します
文字列の部分を交換するでしょう検索。この部分はまた、正規表現を受け入れることができ、純粋な文字列を受け入れることができます。以下の例を参照してください。
検索文字列のライン範囲a
。[A、B、C] スコープまたはBまたはC線から文字列を検索します。
このようなコマンド:
sed 's/a/b/g' file
sed 's/[a,b,c]/<&>/g' file
#这个命令我们下面解释
置き換えます
それは交換する文字列を見つけるための時間です。このセクションの発見の一致部分を見つけるために、内容を置き換えます。
残念ながら、この部分は、通常使用することはできません。一般的に使用される正確な代替品です。たとえば、Bを交換します。
しかし、また、高度な機能があります。PythonとJavaまたは類似の定期的なAPI、sedの交換もしているMatched Pattern
意味が、またグループではなく、下に得ることができます。一般にプレースホルダのためのものである使用&
。
&
いいえ、繰り返します。それは置換文字列の時に使用されている場合は、それが一致するものを見つけるために、生データを表しています。
[&]は 、検索データが[]に囲ま使用してことを示します。「&」 「を使用したデータの検索が」囲まれていることを示します。
次のコマンドは、ファイル内の各ラインを入れて、それらの周りに引用符を使用します。
sed 's/.*/"&"/' file
フラグパラメータ
これらのパラメータは、複数の唯一の最も一般的に使用される導入するために使用することができる、個別に使用することができます。
g 默认只匹配行中第一次出现的内容,加上g,就可以全文替换了。常用。p 当使用了
-n
参数,p
将仅输出匹配行内容。w 和上面的w模式类似,但是它仅仅输出有变换的行。
i 这个参数比较重要,表示忽略大小写。
e 表示将输出的每一行,执行一个命令。不建议使用,可以使用xargs配合完成这种功能。
看两个命令的语法:
sed -n 's/a/b/gipw output.txt' file
sed 's/^/ls -la/e' file
好玩
由于正则的关系,很多字符需要转义。你会在脚本里做些很多\\
,\*
之类的处理。你可以使用|^@!
四个字符来替换\
。
比如,下面五个命令是一样的。
sed '/aaa/s/\/etc/\/usr/g' file
sed '/aaa/s@/etc@/usr@g' file
sed '/aaa/s^/etc^/usr^g' file
sed '/aaa/s|/etc|/usr|g' file
sed '/aaa/s!/etc!/usr!g' file
注意:前半部分的范围是不能使用这种方式的。我习惯使用符号@
。
其他
正则表达式
可以看到,正则表达式在命令行中无处不在。以下,紧做简要说明。
^ 行首$ 行尾
. 单个字符
* 0个或者多个匹配
+ 1个或者多个匹配
? 0个或者1个匹配
{m} 前面的匹配重复m次
{m,n} 前面的匹配重复m到n次
** 转义字符
[0-9] 匹配括号中的任何一个字符,or的作用
| or,或者b 匹配一个单词。比如
\blucky\b
只匹配单词lucky
参数i
上面已经简单介绍了参数i,它的作用是让操作在原文件执行。无论你执行了啥,原始文件都将会被覆盖。这是非常危险的。
通过加入一个参数,可以将原文件做个备份。
sed -i.bak 's/a/b/' file
以上命令会对原file文件生效,并生成一个file.bak文件。强烈建议使用i参数同时指定bak文件。
表演一下
我们通过两个命令,来稍微看下sed和其他命令组合起来的威力。
输出长度不小于50个字符的行
sed -n '/^.{50}/p'
统计文件中有每个单词出现了多少次
sed 's/ /\n/g' file | sort | uniq -c
查找目录中的py文件,删掉所有行级注释
find ./ -name "*.py" | xargs sed -i.bak '/^[ ]*#/d'
查看第5-7行和10-13行
sed -n -e '5,7p' -e '10,13p' file
仅输出ip地址
ip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9