Apologies... Code that I shared earlier is incorrect, revising...
수정된 질문:
우선 서두르게 되어 사과드리고 싶습니다. 저는 QSHELL을 처음 접하고 이제 막 배우기 시작했습니다.. 하지만 가능한 한 빨리 다음 사항을 제 프로그램에 통합해야 하기 때문에 여러분의 도움이 꼭 필요합니다..
기본적으로 유효하지 않은/특수 문자가 포함된 텍스트 파일이 서버에 업로드되고 내 프로그램이 해당 파일을 처리하기 전에 삭제해야 합니다.
예를 들어 다음 콘텐츠가 포함된 uploadfile.txt가 있습니다.
특수 문자를 바꾸려면 다음 명령을 사용하면 정상적으로 작동합니다.
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt
a to z
소문자(az)A to Z
대문자(AZ)0-9
&
그리고 상징,
반점.
기간
그런데 교체하기 전에 보고/통신 목적으로 행을 추출해야 하는데 어떻게 해야 하는지 잘 모르겠고 막히네요... 검색을 시도했지만 여전히 얻을 수 없고 시간이 부족합니다..
그래서 내 질문은,줄 번호 2, 4, 5를 별도의 text.files로 추출하려면 어떻게 해야 합니까?
미리 감사드립니다.
이 문제는 해결되었습니다, 댓글에서 @adminbee가 제안한 대로 다음 명령을 사용했습니다.
sed -n '/[^[:print:]]/p' IFS/MM4R5FLR/S06013/myfile.POL > myfile.pol
도움을 주셔서 감사합니다.
답변1
2단계 접근 방식이 작동하는 경우 먼저 grep
잘못된 문자가 포함된 모든 줄을 파일로 추출한 다음 sed
명령을 사용하여 실제 교체를 수행할 수 있습니다.
[:print:]
귀하의 목적은 특수 문자(예: "인쇄할 수 없는" 문자)를 제거하는 것이므로 열거 문자 대신 POSIX 문자 클래스를 사용해 볼 수 있습니다 (이를 이해 grep
하는 경우 sed
).
따라서 먼저 사용할 수 있습니다
grep '[^[:print:]]' uploadfile.txt > invalid_lines.txt
보관 목적으로 잘못된 문자가 포함된 모든 줄을 추출한 후 실행합니다.
sed -e 's/[^[:print:]]/ /g' uploadfile.txt > outputfile.txt
또는 확실하다면 다음을 통해 내부 편집을 수행하세요.
sed -i -e 's/[^[:print:]]/ /g' uploadfile.txt
파일에서 해당 내용을 지웁니다.
답변2
~에서sed 문서("텍스트 일치로 행 선택"), 유사하게 행을 선택할 수 있습니다.
# First, report lines
sed -n '/[^a-zA-Z0-9&,-]/p' uploadfile.txt > reportfile.txt
# Then, correct and output text
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt
여기서 이 -n
옵션은 "p" 명령이 인쇄하는 내용, 즉 정규 표현식에서 선택한 전체 줄만 출력합니다.