![Sed/Grep/...에서 콜론 앞의 모든 내용을 어떻게 포함합니까?](https://linux55.com/image/6303/Sed%2FGrep%2F...%EC%97%90%EC%84%9C%20%EC%BD%9C%EB%A1%A0%20%EC%95%9E%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%8F%AC%ED%95%A8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
암호
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의 코드sed
grep
find . -name "*.tex" -exec ggrep -i -oP '^[^:]*(?=:)' {} \; | less
출력이 실패하면 파일 이름이 아닌 파일 내용이 출력됩니다. 이 명령은 실제로 파일 내용만 포함하고 파일 이름은 무시합니다.
:
SED/Grep/...에서 콜론 앞의 모든 항목을 어떻게 가져오나요 ?
답변1
sed
인수가 아닌 stdin에서 작동, 파일 이름을 지정하지 않는 한.- 유지할 항목보다 삭제할 항목을 지정하는 것이 더 쉽습니다
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
이것은 나에게 효과적입니다.