누군가가 다음 요구 사항을 충족하는 쉘 스크립트를 작성하는 데 도움을 줄 수 있다면 도움이 될 것입니다.
다음과 같은 파일 이름 목록이 포함된 텍스트 파일이 있습니다.
ADB_AR_2006_07.pdf
ADBL_AR_2010_11.pdf
CBL_AR_2013_14.pdf
CZBIL_AR_2007_08.pdf
BOKL_AR_2015_16.pdf
..
..
이제 텍스트 파일에 나열된 모든 파일 이름에서 첫 번째와 두 번째 "_"를 ","로 바꾸고 싶습니다. 그러면 파일 이름은 다음과 같습니다.
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
..
..
답변1
당신은 간단하게 사용할 수 있습니다sed표현하다:
sed -Ei 's/^([^_]+)_([^_]+)_/\1,\2,/' file
file
수정된 내용:
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
i
- 내부 파일 수정 허용-E
- 확장 정규식 허용
단순화된 접근 방식은 다음과 같습니다.
sed -i 's/_/,/; s/_/,/' file
답변2
간단한 Python 스크립트
#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
for line in f:
tokens=line.strip().split('_')
print(",".join(tokens[0:3]),'_',tokens[3],sep='')
핵심 아이디어는 파일을 한 줄씩 읽고, 구분 기호로 여러 부분으로 나누고, _
슬라이스 표기법을 사용하여 처음 3개 항목을 문자열로 연결한다는 것입니다. 이 출력을 파일에 저장해야 하는 경우 쉘 연산자를 사용하여 출력을 파일로 보내십시오._
[0:3]
>
시험:
$ ./edit_lines.py input.txt
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
답변3
해결책 awk
:
$ awk -F"_" '{ print $1","$2","$3"_"$4}' list
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf