Saya memiliki keluaran berikut dari git status
, bagaimana saya grep
untuk semuanya setelah Untracked files
:
[alexus@wcmisdlin02 Test]$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: app/.gitignore
# new file: app/app.iml
# new file: app/build.gradle
# new file: app/proguard-rules.pro
# new file: app/src/androidTest/java/org/alexus/test/ApplicationTest.java
# new file: app/src/main/AndroidManifest.xml
# new file: app/src/main/java/org/alexus/test/MainActivity.java
# new file: app/src/main/res/layout/activity_main.xml
# new file: app/src/main/res/menu/menu_main.xml
# new file: app/src/main/res/mipmap-hdpi/ic_launcher.png
# new file: app/src/main/res/mipmap-mdpi/ic_launcher.png
# new file: app/src/main/res/mipmap-xhdpi/ic_launcher.png
# new file: app/src/main/res/mipmap-xxhdpi/ic_launcher.png
# new file: app/src/main/res/values-w820dp/dimens.xml
# new file: app/src/main/res/values/dimens.xml
# new file: app/src/main/res/values/strings.xml
# new file: app/src/main/res/values/styles.xml
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
# .idea/
# Test.iml
# build.gradle
# gradle.properties
# gradle/
# gradlew
# gradlew.bat
# settings.gradle
[alexus@wcmisdlin02 Test]$
Seperti ini, tetapi tanpa menentukan jumlah baris, seperti -A
parameter dalam GNU grep
:
[alexus@wcmisdlin02 Test]$ git status | grep -A100 'Untracked files'
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
# .idea/
# Test.iml
# build.gradle
# gradle.properties
# gradle/
# gradlew
# gradlew.bat
# settings.gradle
[alexus@wcmisdlin02 Test]$
Apakah ada cara untuk melakukannya?
[alexus@wcmisdlin02 Test]$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
[alexus@wcmisdlin02 Test]$
command-line-interface
grep
alexus
sumber
sumber
-A
angka yang cukup besar sebagai argumen?Jawaban:
Dengan GNU
grep
(diuji dengan versi 2.6.3):Penggunaan
-P
untuk perl ekspresi reguler,-z
untuk juga mencocokkan baris baru dengan\n
dan-o
hanya untuk mencetak yang cocok dengan pola.Regex menjelaskan :
Pertama kita mencocokkan karakter apa pun (
.
) nol atau beberapa kali (*
) hingga kemunculan stringUntracked files
. Sekarang, bagian dalam tanda kurung(.*\n)
cocok dengan karakter apa pun kecuali baris baru (.
) nol atau beberapa kali (*
) diikuti oleh baris baru (\n
). Dan semua itu (yang ada di dalam backet) dapat terjadi nol atau beberapa kali; itulah arti yang terakhir*
. Sekarang seharusnya cocok dengan semua baris lain, setelah kemunculan pertamaUntracked files
.sumber
grep
, saya terkesan!grep
bukan alat yang tepat. Tetapi jika tidak, pertanyaan ini adalah (saya pikir) bagi pengguna untuk hanya melihat output yang relevan, yang jelas tidak Anda miliki di 8000+ baris,grep
ed atau tidak.grep -A999999999 'Untracked files'
dengan 10.00000 baris sebelum pertandingan dan 10.00000 baris setelah pertandingan. Pendekatan itu bekerja dengan baik. Jadigrep
bisa melakukannya. Masalah dengan pendekatan Anda adalah bahwa Anda memaksanya untuk melakukan kecocokan tunggal pada seluruh file daripada pada setiap baris.Jika Anda tidak keberatan menggunakan sed, berikut adalah solusi yang mungkin
sumber
Saya akan gunakan
awk
untuk ini:Ini
/Untracked files/,0
adalah kisaran kisaran. Ini mengevaluasi ke True dari pertama kaliUntracked files
dan sampai0
mengevaluasi ke True. Karena ini tidak pernah terjadi, ia mencetak sisa file.Perhatikan bahwa
awk
perilaku kepada True adalah mencetak catatan saat ini (baris, biasanya), itu sebabnya kami tidak perlu menelepon secara eksplisitprint
.sumber
Anda dapat mencoba:
di mana
-A
akan mencetak garis konteks setelah pertandingan.Sebagai alternatif gunakan
more
atauless
, misalnya:Untuk tujuan scripting, saya akan menggunakan
ex
/vi
:Untuk memasukkan baris dengan file yang tidak dilacak , gunakan
kd1G
sebagai gantid1G
.Atau tanpa pipa dan
/dev/stdin
, sintaks akan:ex ... <(git status)
.sumber
-A
dalam pertanyaan awal saya, tetapi saya sukamore +/Untracked
bagian dari jawaban Anda.ex
yang setara denganvi -e
.more
/less
sangat berguna)Untuk satu-liner dengan tanda kurung untuk menelurkan subkulit sehingga Anda menghindari mempertahankan variabel:
Anda bisa langsung menyalurkannya ke hal lain yang perlu Anda lakukan.
Atau Anda dapat menggunakannya dalam skrip shell apa pun
Ganti
echo "$LINE"
dengan apa pun yang ingin Anda lakukan dengan data. Jika Anda ingin melewati jalur "File yang tidak dilacak", maka cukup alihkan kedua tes tersebut.sumber
Anda dapat menggunakan sesuatu seperti ini, saya menggunakan Perl, perintah berikut ini ditetapkan
count = 1
jika saya mencocokkan beberapa string di baris saat ini dan ketika loop sementara selesai saya memeriksa variabel jumlah dan saya mencetak rentang garis dari mana pertandingan terjadi pada yang terakhir barissumber
perl -ne 'print if /Untracked files:/ .. 0'