シェルプログラミング - [07]のLinuxのは、ストリームエディタsedコマンドをセッド

シェルプログラミング[シリーズ] https://blog.csdn.net/ilo114/article/category/8961526

入門

  • sedの(ストリームエディタ)、ストリームエディタ。または標準出力ファイルには、行ごとに処理されます。

構文

  • 標準出力処理
sed [选项]... {脚本} [文件]...
  • ファイル処理
stdout | sed [选项]... {脚本}

ファイル

  • 次のコマンドは、ディレクトリを次のように文書の読み取り含むファイルの下で行われます。
i love python
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*

sedのオプションユースケース

直接のp(プリント)コマンドを使用しませんパラメータ

sed "p" file
i love python
i love python
lovelove python
lovelove python
loooove
loooove
I LOVE PYTHON
I LOVE PYTHON
I LOVE pYtHoN
I LOVE pYtHoN
py.*
py.*

空の自動印刷モードを解除-n

  • これは、この文が何を意味するのか、ビットマスクがcentOS7でのヒントの世界に入るためにsedをされるかもしれません。
  • 最初自動的に元のテキスト、テキスト処理して出力マッチング結果を出力しますsedコマンドを使用する場合、最初に説明します。
  • -nそれは単に、元のテキスト出力、出力のみを理解することはできません。
  • 例:
sed -n "p" file
i love python
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*
  • 印刷マッチ
sed -n "/python/p" file
i love python
lovelove python

-eスクリプト、実行中のプログラムのリストに「スクリプト」を追加

  • すなわち、様々な状況に合致する場合プログレッシブプロセスだけでなく、書き込みある-e
  • そのようなマッチング大文字と小文字として
sed -n -e '/python/p' -e '/PYTHON/p' file
i love python
lovelove python
I LOVE PYTHON

正規表現の使用を拡大-r

sed -nr "/python|PYTHON/p" file
sed -nE "/python|PYTHON/p" file
# 两种都可以
i love python
lovelove python
I LOVE PYTHON

-fスクリプトファイル、プログラムの実行リストに「スクリプト」を追加

-i操作ソースファイル

sed -i 's/love/like/g' file
# s是替换 love变成like  g是每行的所有匹配字符,
# 如果不加g 则会匹配到第一个符合的字符替换了就结束当前行的替换
  • 出力なし

sedの一般的な使用パターン

行に一致

sed -n "5p" file
I LOVE pYtHoN

行の一致の開始から行

sed -n '2,5p' file
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN

試合開始行番号、およびセットオフセット行

sed -n '2,+2p' file
  • + 1行オフセット開始カーディナリティから処理された行の数
lovelove python
loooove
I LOVE PYTHON

どこ正規表現の行の処理

sed -n '/^I LOVE/p' file
I LOVE PYTHON
I LOVE pYtHoN

条件2に整合条件1を開始する行の数は、行を完了する

sed -n "/lovelove/,/py\.\*/p" file
lovelove python
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*

整合条件のライン2の開始から終了までの行

sed -n "4,/pYtHoN/p" file
I LOVE PYTHON
I LOVE pYtHoN

行末に一致条件を開始する行数

sed -n "/pYtHoN/, 6s/LOVE/love/gp" file
I love pYtHoN

注:行数は、条件は、それが最後の行にあったであろうに処理されていない場合は、ファイルの終わりを処理範囲場合

sed -n "3,/abc/p" file
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*

編集コマンドでのsed

P印刷印刷

行が追加した後に

sed '/loooove/a bbbbbbbbbb' file
i love python
lovelove python
loooove
bbbbbbbbbb
I LOVE PYTHON
I LOVE pYtHoN
py.*

i 行前追加

sed '/loooove/i aaaaaaaaa' file
i love python
lovelove python
aaaaaaaaa
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*

R外部ファイルには、追加した後、ラインを読みます

  • リストファイル
1 line
2 line
sed '/lovelove/r list' file 
i love python
lovelove python
1 line
2 line
loooove
I LOVE PYTHON
I LOVE pYtHoN
py.*

外部ファイルに書き込まれたマッチングラインのw

sed -n '/I LOVE/w aaa' file  && cat aaa```
  • コンテンツ内部がある場合は、AAAが存在することはできませんがクリアされます
I LOVE PYTHON
I LOVE pYtHoN

d削除

sed '1,3d' file
  • 印刷は、ソースファイルのニーズを修正するために、ソースファイルを変更しませんが実行される-i
I LOVE PYTHON
I LOVE pYtHoN
py.*

S /古い/新しい古い行を置き換えます

第二の別のS / 2 /古い/新しい行

S /古い/新しい/ gのすべての古い行を置き換えます

また第二以降のすべてのS /古い/新しい/ 2gの

すべての古いS /または行IG古い/新しい/、ケースを無視

  • コマンドのデモを交換してください
sed 's/o/AA/i2g' file
i love pythAAn
lovelAAve pythAAn
loAAAAAAve
I LOVE PYTHAAN
I LOVE pYtHAAN
py.*
sed 's/py/&OOO/ig' file
  • アンパサンドは、その試合内容への参照であります
i love pyOOOthon
lovelove pyOOOthon
loooove
I LOVE PYOOOTHON
I LOVE pYOOOtHoN
pyOOO.*

sedのアプリケーション

  • 物品が(セグメント[])いくつかのバケットを有する入力は、MySQLテキストmy.conf設定ファイルを処理する、各セグメントは、いくつかの構成を有しています
#!/bin/bash
#

FILE_NAME=./my.cnf

function get_all_segments
{
	echo "`sed -n '/\[.*\]/p' $FILE_NAME  | sed -e 's/\[//g' -e 's/\]//g'`"
}

function count_items_in_segment
{
	items=`sed -n '/\['$1'\]/,/\[.*\]/p' $FILE_NAME | grep -v "^#" | grep -v "^$" | grep -v "\[.*\]"`
	
	index=0
	for item in $items
	do
		index=`expr $index + 1`
	done

	echo $index

}

number=0

for segment in `get_all_segments`
do
	number=`expr $number + 1`
	items_count=`count_items_in_segment $segment`
	echo "$number: $segment  $items_count"
done
  • テキストmy.conf
# this is read by the standalone daemon and embedded servers
[client]
port=3306
socket=/tmp/mysql.socket

#ThisSegmentForserver
[server]
innodb_buffer_pool_size=91750M
innodb_buffer_pool_instances=8
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_dump_at_shutdown=1
innodb_data_file_path=ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=2G
innodb_log_files_in_group=2
innodb_max_undo_log_size=4G
innodb_undo_directory=undolog
innodb_undo_tablespaces=95

#thisisonlyforthemysqldstandalonedaemon
[mysqld]
port=3306
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/data/mysql
pid-file=/data/mysql/mysql.pid
user=mysql
bind-address=0.0.0.0
sort_buffer_size=16M
join_buffer_size=16M
thread_cache_size=3000
interactive_timeout=600
wait_timeout=600

#ThisSegmentFormysqld_safe
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
max_connections=1000
open_files_limit=65535
thread_stack=512K
external-locking=FALSE
max_allowed_packet=32M

#thisisonlyforembeddedserver
[embedded]
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates
slave-rows-search-algorithms='INDEX_SCAN,HASH_SCAN'
binlog_format=row
binlog_checksum=1
relay_log_recovery=1
relay-log-purge=1


#usethisgroupforoptionsthatolderserversdon'tunderstand
[mysqld-5.5]
key_buffer_size=32M
read_buffer_size=8M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M
myisam_sort_buffer_size=128M
myisam_max_sort_file_size=10G
myisam_repair_threads=1
lock_wait_timeout=3600
explicit_defaults_for_timestamp=1
innodb_file_per_table=1

公開された34元の記事 ウォン称賛7 ビュー8158

おすすめ

転載: blog.csdn.net/ilo114/article/details/91998247