2 Haziran 2020 Salı

grep komutu

Giriş
grep komutundaki seçenekler
- Matcher Selection
- Matching Control
- General Output Control
- Output Line Prefix Control
- Context Line Control
- File and Directory Selection
- Other Options

başlıkları altına toplanmış.

Exit Status
Örnek
Şöyle yaparız. Dosya yoksa  2 değeri döner
grep "i am here" real-file

# Returns: 0 (via: echo $?)

grep "i am not here" real-file

# Returns: 1

grep "i am not here" not-a-file

# Returns: 2 (No such file or directory)
General Output Control
General Output Control yazısına taşıdım

Matching Control
Matching Control yazısına taşıdım

Matcher Selection
-E seçeneği
Extended regex kullan. Şöyle yaparız.
$ str='25 results [22 valid, 2 invalid, 1 undefined]'
grep -E -o '[0-9]+' <<<"$str"
Other Options
--line-buffered seçeneği
Normalde grep kendi içindeki buffer dolduktan sonra çıktı verir. Bunu satır seviyesine düşürmek için şöyle yaparız.
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep --line-buffered LINE | cat
-U
Treat the file as binary
Örnek
Şöyle yaparız
echo "[INFO] Checking if ddl sources have UPPERCASE file names..."
/bin/ls -1 -I *svn* src/main/resources/ddl | grep -U -e "[a-z]"
if [ $? -eq 0 ]; then
  echo "[ERROR] The above files have lowecase letters in their names!"
  exit 1
else
  echo "[INFO] ...done."
fi
-z, --null-data
Açıklaması şöyle
  -z, --null-data
          Treat  input  and  output  data  as  sequences  of  lines,  each
          terminated by a zero byte (the ASCII NUL character) instead of a
          newline. 
Açıklaması şöyle. Dolayısıyla normal kullanımda linefeed karakterini grep'lemek mümkün değil
Since grep is (by default) line-based, the linefeed characters are stripped out before pattern matching takes place.
Örnek
Elimizde şöyle iki dosya olsun
$ cat file1
this is a test:
test1

test2
and another one

$ cat file2
this is a test:

test1

test2

and another one
Şöyle yaparız. Burada sanki tüm dosya tek satır gibi düşünülebilir. İlk dosya eşleşmiyor çünkü test2'den sonra 2 tane \n karakteri yok.
$ grep -Pz '\n\ntest1\n\ntest2\n\n' file1
$ 

$ grep -Pz '\n\ntest1\n\ntest2\n\n' file2
this is a test:

test1

test2

and another one
File and Directory Selection
-a seçeneği
Açıklaması şöyle
-a, --text
Process  a  binary  file  as  if  it  were  text;  this  is  equivalent to the --binary-files=text option.

Output Line Prefix Control

-A seçeçeneği
After anlamına gelir. Eşleşen satırdan sonraki satırları da gösterir.
Örnek
Şöyle yaparız. -m1 ile ilk eşleme seçilir. Bu eşleşmeden sonra gelen 10 satırı görmek için -A10 kullanılır
grep -m1 -A10 PATTERN filename
-B seçeçeneği
Before anlamına gelir. Eşleşen satırdan önceki satırları da gösterir.
Örnek
Eşleşen satırdan önceki 5'inci satırı da çıktıda görmek için şöyle yaparız.
grep -r -i -B 5 -A 5 "match" 
Örnek
Elimizde şöyle bir veri olsun.
cat db_systems.txt

  "db-unique-name": "p00z5bj_iad2bj",
  "db-workload": "OLTP",
  "defined-tags": {},
  "freeform-tags": {},
  "id": "dfadfasfsadfasdfasdf",
  "lifecycle-details": null,
  "lifecycle-state": "AVAILABLE",
  ...
Burada lifecycle-state alanı AVAILABLE olan ve db-unique-name aradığımı değer olan kayıtları bulmak isteyelim. Şöyle yaparız. lifecycle-state alanına göre arama yapar ve çıktıya 6 satır öncesini de dahil ederiz. Daha sonra bu çıktı üzerinde bir daha grep yaparız.
grep -B6 AVAILABLE file | grep db-unique-name
 "db-unique-name": "p00z5bj_iad2bj",
Diğer
grep çıktısının renkleri GREP_COLORS ortam değişkeni ile atanır. Renkler şöyledir
Red:  ms=01;31
Green:  ms=01;32
Yellow:  ms=01;33
Blue:  ms=01;34
Çıktıyı kırmızı yapmak için şöyle yaparız.
export GREP_COLORS='ms=01;31'
Sarı için şöyle yaparız.
export GREP_COLORS='ms=01;33:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'

Hiç yorum yok:

Yorum Gönder