Sed/Grep/...에서 콜론 앞의 모든 내용을 어떻게 포함합니까?

Sed/Grep/...에서 콜론 앞의 모든 내용을 어떻게 포함합니까?

암호

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

어디

  • 입력은 입니다 ./BitTorrentSync/Gyn/1.12.2015.tex: Agents in young <40yr?.
  • 예상되는 출력은 입니다 ./BitTorrentSync/Gyn/1.12.2015.tex.

-n출력을 에 전달하고 싶기 때문에 여기서는 의미가 없다고 생각합니다 . less일치 항목을 검색했지만 실제로는 결과에 .*tex:포함되어서는 안 됩니다 . 결국 교체하지 않는 옵션을 :보유하고 있습니다 .p

DonCristi의 출력grep

:// 시드 없이 grep콜론에서 분할 해 보세요 ... GNU Grep 2.23의 코드sedgrep

find . -name "*.tex" -exec ggrep -i -oP '^[^:]*(?=:)' {} \; | less

출력이 실패하면 파일 이름이 아닌 파일 내용이 출력됩니다. 이 명령은 실제로 파일 내용만 포함하고 파일 이름은 무시합니다.


:SED/Grep/...에서 콜론 앞의 모든 항목을 어떻게 가져오나요 ?

답변1

  1. sed인수가 아닌 stdin에서 작동, 파일 이름을 지정하지 않는 한.
  2. 유지할 항목보다 삭제할 ​​항목을 지정하는 것이 더 쉽습니다 sed.

바꾸다

sed -n 's/.*tex:/[preventColonFromResult]/p' ./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?

아마도 당신 말은

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | sed 's/:.*//'

하지만 이 특정 사용 사례의 경우 다음과 같은 단일 목적 도구를 사용할 수도 있습니다 cut.

printf '%s\n' './BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?' | cut -d: -f1

답변2

grep시간을 내어 설명서를 읽으면 l옵션 을 찾을 수 있습니다.

-l, --files-with-matches
       Suppress normal output; instead print the name of each input file from which  output would normally
       have been printed. The scanning will stop on the first match.

귀하의 find명령은 다음과 같습니다

find . -name "*.tex" -exec grep -il "agent" {} \; | less

또는 더 빠르게

find . -name "*.tex" -exec grep -il "agent" {} + | less

답변3

tex:그냥 대신 sed 및 match에서 이 작업을 수행하기로 결정한 경우 :다음을 시도해 볼 수도 있습니다.

echo "./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?" | sed 's/\(^.*tex\):.*/\1/'

답변4

$ abc="./BitTorrentSync/Gyn/1.12.2015.tex:  Agents in young <40yr?"
$ pqr=$(echo "$abc" | sed -e 's/:.*//')
$ echo $pqr
./BitTorrentSync/Gyn/1.12.2015.tex

이것은 나에게 효과적입니다.

관련 정보