ฉันต้องการ grep สำหรับสตริงที่ขึ้นต้นด้วยเครื่องหมายขีดคั่น / ยัติภังค์เช่น-X
ในไฟล์ แต่มันทำให้สับสนว่านี่เป็นอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันพยายามแล้ว:
grep "-X"
grep \-X
grep '-X'
ฉันต้องการ grep สำหรับสตริงที่ขึ้นต้นด้วยเครื่องหมายขีดคั่น / ยัติภังค์เช่น-X
ในไฟล์ แต่มันทำให้สับสนว่านี่เป็นอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันพยายามแล้ว:
grep "-X"
grep \-X
grep '-X'
คำตอบ:
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
หรือเพียง
รีบเป็นตัวละครพิเศษในการทุบตีตามที่ระบุไว้ในhttp://tldp.org/LDP/abs/html/special-chars.html#DASHREF ดังนั้นการหลบหนีครั้งนี้จะทำให้คุณผ่าน Bash แต่ Grep ยังคงมีความหมายของตัวเองในการขีดกลาง (โดยให้ทางเลือก)
ดังนั้นคุณต้องหลบหนีสองครั้งจริง ๆ (ถ้าคุณไม่ต้องการใช้คำตอบอื่น ๆ ที่กล่าวถึง) จะ / ควรจะทำงานต่อไปนี้
grep \\-X
grep '\-X'
grep "\-X"
วิธีหนึ่งในการลองใช้วิธีที่ Bash ส่งผ่านอาร์กิวเมนต์ไปยังสคริปต์ / โปรแกรมคือการสร้างสคริปต์. sh ที่เพียงแค่สะท้อนข้อโต้แย้งทั้งหมด ฉันใช้สคริปต์ที่เรียกว่า echo-args.sh เพื่อเล่นเป็นครั้งคราวทั้งหมดนี้มี:
echo $*
ฉันขอเป็น:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
คุณได้รับความคิด
grep -e -X
จะทำเคล็ดลับ
-P
(แต่นั่นเป็นอีกเรื่องหนึ่งและไม่ได้ใช้ที่นี่)
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
ฉันไม่สามารถเข้าถึงเครื่อง Solaris ได้ แต่grep "\-X"
ทำงานกับฉันบน linux
วิธีที่ถูกต้องคือการใช้ "-" เพื่อหยุดการประมวลผลอาร์กิวเมนต์ตามที่ได้กล่าวไปแล้ว นี่เป็นเพราะการใช้งาน getopt_long (GNU C-function จาก getopt.h) ในแหล่งที่มาของเครื่องมือ
นี่คือเหตุผลที่คุณสังเกตเห็นปรากฏการณ์เดียวกันในเครื่องมือบรรทัดคำสั่งอื่น ๆ ; เนื่องจากส่วนใหญ่เป็นเครื่องมือของ GNU และใช้การโทรนี้จึงมีพฤติกรรมเหมือนกัน
ในฐานะที่เป็นหมายเหตุด้าน - getopt_long คือสิ่งที่ทำให้เรามีตัวเลือกที่ดีระหว่าง -rlo และ --really_long_option และการรวมกันของข้อโต้แย้งในล่าม
หากคุณกำลังใช้ยูทิลิตีอื่นที่ส่งผ่านอาร์กิวเมนต์เดียวไปยัง grep คุณสามารถใช้:
'[-]X'
คุณสามารถใช้ nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
หวังว่าคนนี้จะตอบสนองวัตถุประสงค์ของคุณ
grep "^ -X" ไฟล์
มันจะ grep และเลือกบรรทัดทั้งหมดในไฟล์ ^ ใน grep "^" หมายถึงบรรทัดที่ขึ้นต้นด้วย
-
ไม่ใช่บรรทัด
--
หมายว่าอะไรหรือทำอะไร: unix.stackexchange.com/questions/11376/ …