저는 표준 입력( cat
두 개의 파일을 함께 사용)을 사용하고 있으며 결과의 마지막 10자를 제외한 모든 문자가 다음 명령을 통해 전달되기를 원합니다.
검색을 통해 찾을 수 있는 것은 sed
, 를 사용하여 각 줄의 마지막 n자를 삭제하거나, awk
또는 을 사용 하여 n 줄을 삭제하는 것입니다.tr
head
tail
rev
이 작업을 수행하기 위해 표준 출력에서 명령으로 파이프하려면 무엇을 사용할 수 있습니까(간단하고 단일 명령을 사용하여)?
예:
Input:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE() UNION ALL
Output:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE()
어쨌든 저는 Windows에서 CygWin을 사용하고 있기 때문에 상당히 표준적이고 오래된 유닉스 도구와 함께 사용해야 합니다 :(
답변1
당신이 사용할 수있는 head
:
command | head -c-10
command
마지막 10바이트가 출력에서 제거됩니다.
인용 출처 man head
:
-c, --bytes=[-]K
print the first K bytes of each file; with the leading `-',
print all but the last K bytes of each file
제거하려는 10개의 문자가 한 줄에 표시된다고 구체적으로 언급하셨으니 sed
그것도 사용하시면 됩니다. 명령 출력을 다음으로 파이프합니다.
sed '$s/\(.\{10\}\)$//'
또는 sed
확장 정규식을 지원하는 경우:
sed -r '$s/.{10}$//'
구문은 다음과 유사합니다 perl
.
perl -pe 's/.{10}$// if eof'
답변2
다음을 사용해야 합니다 perl
.
$ perl -lpe '$_=substr($_,0,-10) if eof' file
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE()