![파일이나 폴더 이름을 지정할 때 문자 제거](https://linux55.com/image/70513/%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%82%98%20%ED%8F%B4%EB%8D%94%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%A0%20%EB%95%8C%20%EB%AC%B8%EC%9E%90%20%EC%A0%9C%EA%B1%B0.png)
여러 줄이 포함된 텍스트 파일이 있습니다. 각 행에는 다음 형식의 날짜가 있습니다.
12/2/2015
15/9/2013
08/3/2011
02/5/2005
.
.
.
다음과 같은 간단한 루프를 사용하여 for
이 텍스트 파일의 각 줄에 대한 폴더를 만들고 싶습니다.
#!/bin/bash -f
for f in $(cat ./file.txt ); do
mkdir ${f}
done
/
날짜 형식의 문자가 있으므로 이 코드는 작동하지 않습니다 . 폴더를 생성하는 동시에 폴더 이름에서 해당 문자를 제거하려면 어떻게 해야 합니까? 따라서 출력 폴더 이름은 다음과 같습니다.
1222015
1592013
0832011
0252005
.
.
.
답변1
다음과 같은 명령을 사용할 수 있습니다.
sed -e 's/\///g' < file.txt | xargs mkdir
이 sed
명령은 file.txt에서 줄 바꿈을 제거하고 파일의 각 줄에 대해 파이프가 실행됩니다 xargs
.mkdir
tr
대신 사용할 수 있는 동등한 명령(don_crissti가 제안함) sed
은 다음과 같습니다.
tr -d / < file.txt | xargs mkdir
답변2
Perl 등으로 재창조하는 대신 원본 코드를 가져와 관련 부분을 추가하여 문제가 있는/문자를 제거했습니다.
원래 //는 전역 대체를 위한 bash 구문입니다(문제가 되는 /s가 여러 개 있기 때문입니다).
뒤에 오는 /는 대체하려는 (/)를 나타냅니다.
마지막 /는 우리가 바꾸고 싶은 내용(아무것도 없음) 앞에 옵니다.
#!/bin/bash -f
for f in $(cat ./file.txt ); do
mkdir ${f////}
done
답변3
가능한 해결책 awk
:
awk -F"/" '{ print $1 $2 $3; }' file | xargs mkdir
답변4
이것은 bash 및 sed에 대한 방법입니다.
for var in $(cat data01.txt); do dir=$(echo $var | sed -e 's/\///g;'); mkdir -vp $dir; done