파일 이름의 일부를 사용하여 파일 자체 내의 값을 바꾸는 프로세스를 자동화하려고 합니다.
현재 사용하는 수동 프로세스는 다음과 같습니다.
얻다협회 이름수동
$ 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