홑 따옴표 쌍따옴표
echo "Hello $USER"
echo 'Hello $USER’
홑따옴표는 모든 문자 그대로 해석
쌍따옴표는 변수 확장이나 명령어 치환 등에 사용된다.
grep
GREP(Global Regular Expression Print)의 약자로 텍스트 파일에서 특정 패턴을 찾아 출력하는 명령어다.
기본 정규 표현식을 의미하는 BRE(Basic Regular Expression)를 사용한다.
grep "apple" example.txt
example.txt 파일에서 "apple"을 검색한다.
grep "^apple" example.txt
example.txt 파일에서 라인의 시작이 apple인 경우를 모두 검색한다.
( ) 그룹으로 묶기 위해서는 BRE에서는 그룹 특수문자 앞에 \를 붙여서 사용한다.
grep -r -E "(this|use) (program|the)" "/etc/ufw"
/etc/ufw 경로 밑에 this 혹은 use, program 혹은 the가 이어진 문장을 찾는다.
-r은 recursive라는 뜻으로 지정한 경로의 하위까지 전부 찾는다.
-E는 단순 문자열 검색이 아닌 확장된 정규 표현식을 사용할 때 필수로 넣어줘야 한다.
( ) 그룹 문자 정규 표현식을 사용하기 위해 -E를 사용했으며 -E를 안쓰면 ( )를 문자열 그대로로 받아들인다.
grep -r -v "see"
-v "문자열" 옵션을 쓰면 문자열 제외한 검색도 된다.
egrep
grep -E를 대체한다.
grep에 정규표현식 기능을 확장한 형태이다.
ERE(Extended Regular Expression) 기능으로 동작하며 BRE보다 더 많은 기능을 제공한다.
egrep "apple|banana" file.txt
ERE(Extended Regular Expression)
egrep "app+" file.txt
"file.txt"에서 "ap" 다음에 "p"가 하나 이상 반복되는 패턴
egrep "ha{2,4}" file.txt
"file.txt"에서 "ha" 다음에 "a"가 2회에서 4회 반복되는 패턴
egrep "\." file.txt
egrep은 특수 문자를 이스케이프(\)하여 해당 문자를 문자 그대로 해석하게 할 수 있습니다.
예를 들어, "file.txt"에서 점(.) 문자를 찾고 싶다면 위와 같이 사용하고 "."로 검색하면 모든 문자를 의미하는 정규표현식이므로 모든 라인이 출력됩니다.
fgrep
정규표현식을 아예 사용하지 않을 때 사용한다.
위와 같이 "."을 검색하는 경우 모든 문자열을 뜻하는 정규 표현식이 아닌 "." 문자 자체를 찾을 때 사용한다.
fgrep은 grep에 -E를 주지 않은 것과 같은 의미이기 때문에 grep은 fgrep과 같다.
즉, grep "."은 fgrep "."이랑 같다
ag
grep이나 egrep보다 빠른 성능이 있는 ack가 있는데, 그것보다도 빠른 검색 도구인 ag가 있다.
brew install the_silver_searcher
ag는 grep에서 -r(하위 검색)과 -E(ERE)를 사용한 검색 방식이다.(가장 많이 쓰는 옵션이니 이렇게 하는 것을 추천)
KEYWORD="(if|for|while|try)"
ag "$KEYWORD\("
if에 공백없이 특수문자 "("가 붙은 문자열을 찾는다.
if(, for( 등등이다.
코드컨벤션 찾는 용도로 쓴다.
wc
wc는 문자갯수를 찾고
wc -l은 라인 갯수를 찾는다.
ag "$KEYWORD\(" | wc -l 하면 해당 라인이 몇개인지 찾아준다.
ag "$KEYWORD\(" -l 하면 해당 파일만 찾아준다.
xargs
반복작업을 할 때 사용되며 다음 인자에 명령을 던질 때 사용한다.
ls | xargs rm
ls로 나온 결과를 전부 인자로 넘겨서 rm을 실행시킨다.
find . -type f -name "*.txt" | xargs grep "keyword"
현재 디렉토리부터 모든 하위 디렉토리에서 확장자가 ".txt"인 파일들을 검색한 뒤, grep 명령어로 "keyword"를 검색하는데 사용된다.
sed
파일의 내용을 치환하는 데 사용한다.
sed 's/apple/orange/' example.txt
example.txt 파일에서 apple 글자 전체를 orange로 치환한다.
s/ 에서 s는 substitute의 약자다.
sed 's/apple/orange/g' file.txt
위의 방식에서는 한 라인에서 두번째 나오는 단어를 치환하지는 못한다 예를 들어 "apple apple apple"이렇게 되어있으면 결과는 "orange apple apple"이 된다.
/g를 사용하면 global(전체) 영역에 apple을 orange로 바꾼다.
sed -i '' -E
-i ''를 주면 파일을 직접 수정한다.
-i ''가 없으면 파일을 수정하지 않고 변경된 내용만 출력해준다.
-E는 확장된 정규 표현식(ERE)을 쓴다는 의미다.
sed와 grep등은 기본적으로 BRE을 사용한다.
KEYWORDS="(if|for|while|try)"
ag "$KEYWORDS\(" -l \
| xargs sed -i '' -E "s/$KEYWORDS\(/\1 (/"
파일의 내용을 바꾸는 명령어다.
"s/$KEYWORDS\(/\1 (/" 이 부분이 좀 헷갈릴 수 있다.
"s/$KEYWORDS\(/\1 (/"
s/는 substitue로 시작한다는 의미다.
/\1은 \1은 대체 그룹을 뜻한다 즉 왼쪽 키워드를 가져오고 " "공백 넣어서 (를 넣어준다는 의미이다.
"for("로 시작하는 것들을 "for ("가 된다.
sed 's/\(.*\)/(\1)/' file.txt
sed -E 's/(.*)/(\1)/' file.txt
(.*)는 한 라인에 있는 전체 문자열을 뜻한다.
'🐧 Linux' 카테고리의 다른 글
Linux Volume Mount 하는 방법 (vdb fdisk 파티셔닝) (0) | 2023.12.21 |
---|---|
Java 코딩 컨벤션을 위해 리눅스 명령어로 뜯어 고치기 (1) | 2023.11.27 |
리눅스 필수 기초 명령어 정리 (0) | 2022.07.30 |
리눅스 시스템에서 깨진 파일명 지우기 (0) | 2022.07.28 |