or
예를 들어, 파일을 읽을 때 셸에서 선택 항목을 확장할 수 있는지 여부입니다.
예를 들어 grep
파일에서 A 또는 B를 일치시키는 것과 같은 구문이 지원됩니다.(A|B)
마찬가지로, 다음 파일이 있는 경우:
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
범위가 넓어지기 때문에 할 수 있어요 cat file{1..5}.txt
. bash
몇 개의 파일에 대해 이 작업을 수행하는 동등한 방법이 있습니까?
예를 들어 cat file(1|5).txt
, 2?만 인쇄하세요.
답변1
일치시킬 표준 파일 이름 와일드카드 패턴숫자예 [0-9]
. 이는 단일 숫자와 일치합니다.
cat file[0-9].txt
다음 중 두 가지만 선택하세요.
cat file[25].txt
9보다 큰 숫자의 경우 중괄호 확장이 유용합니다(그러나 와일드카드 패턴과 중괄호 확장 간의 차이점은 아래 참고 사항을 참조하세요).
cat file{25..60}.txt
마찬가지로 중괄호 확장을 사용하면 개별 숫자가 허용됩니다.
cat file{12,45,900,xyz}.txt
(위의 예에서 중괄호 확장은 산술 루프를 포함하지 않고 단순히 제공된 문자열을 기반으로 이름을 생성합니다.)
에서는 셸 옵션( )을 활성화하면 bash
다음 도 작동합니다.extglob
shopt -s extglob
cat file@(12|45|490|foo).txt
이 패턴은 - 구분 기호가 포함된 @(...)
모든 패턴과 일치합니다 .|
[...]
및 중괄호 확장과 같은 와일드카드 패턴의 차이점은 @(...)
중괄호 확장이 다음과 같다는 것입니다.명령줄에서 생성현재 디렉터리에 있는 기존 이름과 실제로 일치하지 않을 수도 있습니다. 파일 이름 와일드카드 패턴은 이름과 일치하지만 가능한 이름이 모두 존재하지 않더라도 쉘은 불평하지 않습니다. 만약에아니요nullglob
일치하는 이름이 있는 경우 쉘 옵션도 설정되지 않으면 패턴은 확장되지 않은 상태로 유지되며 , 이 경우 패턴은 제거됩니다.
예:
touch file1
ls file[0-9]
file1
여기서는 파일 목록만 표시됩니다.
만약 당신이 그것을 가지고 있다면 ls file{0..9}
, ls
당신은 그것을 찾을 수 없다고 불평할 것 file0
입니다 file2
.
다음 예에서 첫 번째 명령은기존 이름주어진 패턴과 일치하지만 두 번째 줄은 아직 존재하지 않는 파일을 생성합니다.
touch file[0-9]
touch file{0..9}
답변2
사용할 구문은 sum file{1,2}
으로 평가됩니다 .file1
file2
$ ls
$ touch file{1,2,3,4,5,6,7,8,9}
$ ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
touch file{1..9}
Inian이 아래에서 지적했듯이... 이 예에서는 수행하기가 더 쉬울 것입니다...
$ ls
$ touch file{1..9}
$ ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
다음과 같이 여러 표현식을 사용할 수도 있습니다.
$ ls
$ touch file{1..9}{a..z}
$ ls
file1a file1b file1c
[...]
file9x file9y file9z
예, 위 작업을 수행하면 234( 9
회 26
)개의 파일이 생성됩니다.
답변3
예, 쉘에서 중괄호 확장을 사용할 수 있습니다 bash
. 몇 가지 파일의 경우 그냥 하거나 file{1..2}
좋아하세요.file{1,2}
또는 어떤 경우에는 파일이 존재하지 않는 것이 걱정된다면 간단한 루프를 수행하십시오.
for file in file{1..4}.txt; do
[ -f "$file" ] || continue
echo "$file" # Do other actions on file here
done
또는 연결만 파일에 대한 유일한 작업인 경우불확실한언제든지 존재하지 않을 것 같은 파일은 표시 cat
하고 오류를 억제하세요. /dev/null
파일을 사용할 수 없는 경우 표준 오류를 로 리디렉션하면 오류가 억제됩니다.
cat file{1,5}.txt 2>/dev/null
file[15]
또는 파일을 찾을 수 없어도 오류를 표시하지 않는 glob 표현식을 사용하세요 .
cat file[15].txt