Как перезаписать все строки файла, кроме первой?

Кажется, что GTK и GTK+ одинаковы, а GTK1 довольно старый, поэтому в моей системе у меня есть:

  1. GTK2 (аналогично GTK+ 2)
  2. GTK3 (аналогично GTK+ 3)
  3. QT5

Один из способов узнать, какой инструментарий использует приложение, — посмотреть на зависимости для приложения, например, в системе Debian, такой как Ubuntu, найти зависимости для коврика для мыши приложения:

dpkg -s mousepad | grep "Depends"
Depends: libc6 (>= 2.4), libdbus-1-3 (>= 1.9.14), libdbus-glib-1-2 (>= 0.88), libglib2.0-0 (>= 2.41.1), libgtk-3-0 (>= 3.2.1), libgtksourceview-3.0-1 (>= 2.91.4), libpango-1.0-0 (>= 1.14.0), dconf-gsettings-backend | gsettings-backend

Здесь вы можете видеть, что коврик для мыши зависит от libgtk -3 -0. Точно так же зависимости для приложения GTK2, такого как leafpad, имеют libgtk2.0 -0, а зависимости для приложения QT, такого как VirtualBox, имеют что-то вроде libqt5core5a

.

Обратите внимание, чтобы узнать имя пакета для приложения, такого как виртуальный бокс, который вы можете использовать

dpkg -l | grep -i virtualbox

, поэтому в этом примере он возвращает «virtualbox -5.1» в качестве имени пакета.

После того, как вы узнали, как выглядит каждый из GTK2, GTK3 и QT, вы можете сказать по значкам, что использует приложение. Кажется маловероятным, что GTK2, GTK3 и QT будут использовать одну и ту же тему значков (на самом деле я не смог найти тему значков, которую я мог бы использовать как для GTK2, так и для GTK3 ).

Это не только внешний вид значков, вы также можете сказать, что отображается на левой панели при открытии файла, как кажется:

GTK2 отобразит:

Search
Recently Used
Home folder
Desktop
Devices (so will always show FileSystem, plus any separate partitions)
ALL bookmarks 

GTK3 отобразит:

Recently Used
Home folder
Desktop
Documents
Downloads
Music
Pictures
Videos
Rubbish Bin
Bookmarks excluding Documents, Downloads, Music, Pictures and Videos
+ Other Locations

Таким образом, в GTK3 кажется, что вы не можете отображать устройства на левой панели (, кроме съемных устройств ), поэтому вам нужно нажать «+ Другие местоположения», чтобы перейти к вашим разделам, и, кажется, нет способа исключить Документы, загрузки, музыка, изображения, видео и мусорное ведро. Если есть способ настроить средство выбора файлов GTK3 для отображения устройств, мне было бы интересно узнать.

Причина, по которой вы не можете использовать одну и ту же тему значков для GTK2 и GTK3, заключается в том, что они используют разные имена для файлов значков,поэтому вам нужно будет найти схему значков, которая имеет имена значков как для GTK2, так и для GTK3.

QT выглядит совершенно по-другому, поэтому левая панель выглядит так:

QT file chooser

Так что это очень минималистский взгляд

1
15.08.2019, 00:42
5 ответов

Несколько вариантов использования in -редактирования места, а не перенаправления:

ed -s file.csv <<'EOF'
1r !some_command
1,.wq
EOF

или аналогичный

some_command | sed -i.bak -e '1r /dev/stdin' -e 1q file.csv

хотя, насколько мне известно, последний использует временный файл «под капотом».

4
27.01.2020, 23:14

Если вы хотите сохранить неизменный заголовок, вы можете записать заголовок в другой файл с помощью head -1 file.csv > header.csvи использовать следующий синтаксис:

{ head -1 header.csv && some_command; } > file.csv

Как описано в комментариях, Bash сначала усекает file.csvперед выполнением команд внутри { }, что означает, что вы не можете просто запустить head -1 file.csvвнутри { }.

Этот синтаксис { }также можно использовать для объединения вывода двух команд, как описано здесь .

0
27.01.2020, 23:14

Нет простого способа заставить оболочку перезаписывать файл, начиная со смещения. И вы все равно не должны редактировать файлы на месте, потому что это оставляет усеченный файл, если редактирование прерывается сбоем или сбоем питания.

Создайте новый файл. Начните с копирования первой строки, затем напишите остальную часть содержимого. Когда вы закончите, переместите новый файл на место.

read -r first_line <file.csv
{
  printf '%s\n' "$first_line
  … # write the rest of the content to standard output
} >file.csv.new
mv -f file.csv.new file.csv
0
27.01.2020, 23:14
sed -i '2,$d'  file.csv && some_command >> file.csv

sed -i '2,$d' file.csvудалит все, кроме первой строки файла.

-iуказывает sed работать в -месте

2,$адреса от строки 2 до конца файла

dвыполняет удаление.

Вы можете проверить, делает ли команда то, что вам нужно, опустив-i

После этого && some_command >> file.csvбудет добавляться к файлу только в том случае, еслиsedуспешно его очистил.

0
27.01.2020, 23:14
execute command >csvfile
sed -i '1i mention the header here' csvfile
2
27.01.2020, 23:14

Теги

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