Grep Sed Awk

 

 

(Edited: bài viết từ cuối 2011 – ID:110 – draft state bấm nhầm publish lỡ rồi thôi)

 

Grep

Tìm các dòng chứa chuỗi chuoi trong 1 files:

$ grep "chuoi" ten_file

.

Tìm các dòng chứa chuỗi chuoi trong nhiều files đuôi .txt:

$ grep "chuoi" *.txt

(Nếu dùng find để tìm CHUOI trong file .txt:

 $ find . -name *.txt -exec grep CHUOI {} ;

hoặc

 $ find . -name *.txt -print | xargs grep CHUOI

)

Tìm không phân biệt chữ hoa chữ thường: tùy chọn -i

$ grep -i "chuoi" ten_file

Tìm chính xác từ chuoi ko tinh chuỗi dài hơn như chuoichien : tùy chọn -w

$ grep -w "chuoi" ten_file

Tìm những dòng Không chứa chuoi (phủ định của tìm dòng chứa): tùy chọn -v

$ grep -v "chuoi" ten_file

Kết hợp lệnh ps để tìm process có tên java :

$ ps -ef | grep java

 

Ngoài ra còn có option -E để tìm theo RegEx, -F để tìm theo file.

Tìm tất cả dòng có chứa github hoặc bitbucket trong config các repository Git:

$ grep -E "github|bitbucket" */.git/config

 

Một số Linux distro sẽ có egrep tương đương “grep -E” , và fgrep tương đương “grep -F” .

Ngoài ra còn option -A-B cũng tương đối hữu ích.

 

.

Sed

Sed chủ yếu dùng để thay thế (substitute) các từ trong 1 văn bản, và có thể xuất kết quả ra output hoặc file khác (chứ ko nhất thiết đè lên file gốc).

Thay từ old (đầu tiên) bằng từ new trong file filename.txt :

$ sed -i 's/old/name/' filename.txt

Thay từ old (tất cả) bằng từ new trong file filename.txt :

$ sed -i 's/old/name/g' filename.txt

 

Nếu không thay thế trực tiếp (in place) thì ko cần option -i , có thể append/output ra file mới:

$ sed 's/old/name/g' filename.txt > newfile.txt

 

VD: thay URL HTTPS sang GIT trong .git/config file của 1 Git Repository:

Repo https://github.com/ducquoc/euler-fun

sẽ có dòng sau trong file config trong thư mục .git ở root dir repo:

[remote "origin"] 
  url = https://github.com/ducquoc/euler-fun.git

thì sau khi chạy dòng sed sau sẽ thay giao thức HTTPS bằng Git over SSH:

$ sed -i 's/https:\/\/github.com\/ducquoc/git@github.com:ducquoc/g' euler-fun/.git/config

(dấu backslash \ để escape ký tự slash /  trong regular expression ). Kết quả:

[remote "origin"] 
  url = git@github.com:ducquoc/euler-fun.git

Áp dụng tương tự cho các Git repository ở bitbucket:

$ grep -E "bitbucket|github" */.git/config
$ sed -i 's/https:\/\/ducquoc@bitbucket.org\/ducquoc/git@bitbucket.org:ducquoc/g' */.git/config

 

 

.

Awk

Ứng dụng tìm process, lọc PID và xử lý :

$ ps -ef | grep PROCESS | grep -v grep | awk '{print $2}' | xargs kill -9

(kill -9 tương đương kill -s SIGTERM để tắt tất cả process input)

Tương tự:

$ ps -ef | awk '/PROCESS/ && !/awk/ {print $2}' | xargs -r kill -9

.

Bonus:

* nohup để giữ process vẫn chạy sau khi user ko còn login:

$ nohup  /usr/bin/php long_running_process.php > /var/log/nohup_long_running_process.log &

* Liệt kê các file backups và xóa bớt những file quá hạn với xargsrm -rf :

$ ls -td1 /data/backup/*/ | tail -n +4 | xargs -r rm -rfv 2> /var/log/backup_cleaner.log

 

.

 

./.

Advertisements

About DucQuoc.wordpress.com

A coder, husband and brother...
This entry was posted in Coding, Linux. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s