암호
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
이것은 나에게 효과적입니다.