파일 이름에서 문자열의 일부를 추출하여 해당 파일에 삽입하는 방법

파일 이름에서 문자열의 일부를 추출하여 해당 파일에 삽입하는 방법

파일 이름의 일부를 사용하여 파일 자체 내의 값을 바꾸는 프로세스를 자동화하려고 합니다.

현재 사용하는 수동 프로세스는 다음과 같습니다.

얻다협회 이름수동

$ grep -o orgname......... *2017-04* |uniq
...
uname=123456&**orgname=ABC5678**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36

그런 다음 교체협회 이름새 이름을 사용하다

$ sed -i 's/ABC1234/5678/g' `*`5678`*` ; sed -i 's/DEF2345/6789/g' `*`6789`*`; sed -i etc...

최종 결과는 다음과 같습니다.

uname=123456&orgname=**1234**&userType=PERSISTENT&userLoginName=someusername&eventType=FAILED_LOGIN_ATTEMPT&timeOfOccurrence=2017-03-12%2016%3A49%3A36

파일 이름은 다음과 같습니다.

rsa.collect.rsa-IB_L**1234**-2017-03-12.log.web1.decrypt

다음에 무슨 일이 일어나더라도조직 이름 =파일 이름에 동일한 xxxx가 있는 파일에서만 ABC5678에서 Lxxxx 뒤에 오는 항목으로 변경해야 합니다.

파일 이름에서 해당 숫자를 추출하여 sed. 나는 이 모든 것을 한 번에 수행하기 위해 bash 스크립트를 작성하고 싶습니다.

grep -P나는 그것을 어떤 종류의 변수에 넣고 그것을 사용하는 조합을 시도했지만 sed아마도 더 좋고/쉬운 방법이 있을까요?

다른 질문이 있으면 알려주시기 바랍니다.

답변1

파일 이름이 변수에 있으면 쉘을 사용할 수 있습니다매개변수 확장운영자가 그 일부를 추출합니다. 그런 다음 이를 sed명령으로 대체하십시오. 아래에서는 하위 문자열 연산자를 사용하여 위치 20에서 시작하는 4개의 문자를 가져옵니다.

for file in rsa.collect.rsa-IB_L*.log.web1.decrypt; do
    orgname=${file:20:4}
    sed -i "s/orgname=[^&]*/orgname=$orgname/" "$file"
done

관련 정보