Удалить последние n символов из строк в файле

Я думаю, что вы видите что-то вроде этого:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   sub (new commits)

no changes added to commit (use "git add" and/or "git commit -a")

Чтобы понять это, вам нужно знать, что когда вы добавляете подмодуль в свой проект, git отслеживает не только то, откуда он был клонирован, но и самый последний (или выбранный )идентификатор фиксации этого подмодуля. (т. е. его ГОЛОВА ). При проверке он обязательно получает эту конкретную версию подмодуля; в противном случае вы могли бы получить несовместимую версию подмодуля при проверке старой версии вашего кода.

Git сообщает вам, что идентификатор фиксации HEAD подмодуля изменился, и что вы можете зафиксировать это изменение в родительском проекте. Если вы сделаете git diff,вы увидите измененный идентификатор фиксации (ваши идентификаторы, конечно, будут другими):

$ git diff
diff --git a/sub b/sub
index d67371f..07bc855 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit d67371f7485a97dd4d00802619f93a0cb4d2df16
+Subproject commit 07bc855dd4d958783a686241b911aead1d73ca3c

Неважно, почему изменился идентификатор фиксации HEAD извлеченного подмодуля; оба извлекая новую версию подмодуля (через, например, git pullв каталоге подмодуля )или локально фиксируя в каталоге подмодуля, делают одно и то же — изменяют идентификатор фиксации HEAD подмодуля, добавляя больше коммитов — как что касается родительского проекта.

1
22.10.2021, 08:14
2 ответа

Вот awkрешение, столь же быстрое, как и подход Фриппе sed, использующий пример файла со 100 000 строк:

time awk '{print substr($0, 1, length($0)-8)}' 100k.txt

real    0m4.110s
user    0m0.142s
sys     0m0.422s

time sed "s/.\{0,8\}$//; /^$/d" 100k.txt

real    0m4.043s
user    0m1.558s
sys     0m0.345s

Замените 8любым числом. Основное отличие здесь в том, что awkбудет печатать новую строку, если длина обрезки превышает длину строки, а sed— нет.

3
22.10.2021, 18:45

Использование Raku (, ранее известного как Perl _6)

raku -ne '.trim-trailing.chop(8).put;'

ИЛИ

raku -pe '.=trim-trailing;.=chop(8);'

Пример ввода:

wxxyyyzzzz_1234.txt
aaabbbccc_7777.txt 
nnhhaa_8888.txt 
ayquabay_9999.txt 
ayqynbnbn_1122.txt 
ooppaa_3454.txt

Пример вывода:

wxxyyyzzzz_
aaabbbccc_
nnhhaa_
ayquabay_
ayqynbnbn_
ooppaa_

Обратите внимание, что оба приведенных выше ответа используют процедуру trim-trailingРаку, чтобы избавиться от завершающих пробелов. Не стесняйтесь удалять trim-trailingи/или изменять количество символовchop-ped с правого -конца строки.

https://docs.raku.org/routine/chop
https://raku.org

1
24.10.2021, 06:00

Теги

Похожие вопросы