더 나은 관리 시스템으로 전환 한 이후로 각 소스 파일의 맨 위에있는 모든 중복 로그를 제거하고 싶습니다. 메모장 ++에서 "파일에서 바꾸기"를 사용하고 일치 항목을 \A(//.*\n)+
공백으로 대체하여 결과를 얻을 수있었습니다 . 그러나 Linux에서는 그런 운이 없으며 'xargs'와 'sed'에 의지해야합니다.
내가 사용하는 sed 표현식은 다음과 같습니다.
sed '1,/^[^\/]/{/^[^\/]/b; d}'
확실히 추악하지만 작동하는 것 같습니다.
내가 가진 문제는 우리 시스템의 모든 소스 파일을 공급하기 위해 'xargs'를 통해 실행하려고 할 때 출력을 '스트립 된'파일로 리디렉션 할 수 없다는 것입니다. 원본.
나는 라인에 무언가를 원한다.
find . -name "*.com" -type f -print0 | xargs -0 -I file sed '1,/^[^\/]/{/^[^\/]/b; d}' "file" > "file.stripped"
그러나 이미 너무 많은 따옴표를 사용하고 있기 때문에 ">"를 수신 환경 (쉘)으로 전달하는 데 슬픔이 있습니다. 나는 모든 종류의 탈출과 쉘 "래퍼"를 시도했지만 공을 치지 못합니다.
누구든지 나를 올바른 방향으로 안내해 줄 수 있습니까?
고마워, 슬라 티.
예를 들어 더 간단한 sed 표현식으로 비슷한 시나리오를 만들었습니다.
각각 안에 "abcd"문자열이있는 3 개의 파일을 만들었습니다.
# ls -l
total 12
-rw-r--r-- 1 root root 5 Oct 6 09:05 test.aaaaa.com
-rw-r--r-- 1 root root 5 Oct 6 09:05 test2.aaaaa.com
-rw-r--r-- 1 root root 5 Oct 6 09:05 test3.aaaaa.com
# cat test*
abcd
abcd
abcd
xargs 대신 -exec 옵션을 사용하여 보여준대로 find 명령을 실행하고 "b"의 모든 "a"와 입력 파일을 직접 작성하는 -i 옵션을 대체하는 어리석은 표현의 sed 표현식을 대체합니다.
# find . -name "*.com" -type f -print0 -exec sed -i 's/a/b/g' {} \;
./test2.aaaaa.com./test3.aaaaa.com./test.aaaaa.com
# cat test*
bbcd
bbcd
bbcd
귀하의 경우에는 다음과 같이 보일 것입니다.
# find . -name "*.com" -type f -print0 -exec sed -i '1,/^[^\/]/{/^[^\/]/b; d}' {} \;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다