sed '/something interesting/,$d' < file > newfile
Который можно оптимизировать до:
sed -n '/something interesting/q;p' < file > newfile
для
sed
, чтобы выйти, как только он найдет шаблон.Что с реализацией GNU
sed
, как отмечает @RakeshSharma, может быть упрощено доsed '/something interesting/Q' < file > newfile
Чтобы обрезать файл в месте -с
ksh93
вместоbash
, вы можете сделать:printf '' <>; file >#'*something interesting*'
<>;
подобен стандартному оператору перенаправления <>
(, открытому в режиме чтения+записи ), за исключением того, что файл усекается в конце, если команда выполнена успешно. <#pattern
выполняет поиск начала следующей строки, соответствующей шаблону. (обратите внимание, что он работает (с ksh93u+ по крайней мере )с printf ''
на стандартном выводе, но не с некоторыми другими встроенными командами, такими как true
, :
или eval
. Похоже на ошибку . Также это не может быть последняя команда скрипта(другая ошибка)).
Правильный путь:
sudo sh -c "cat >> /etc/grafana/provisioning/datasources/InfluxDB.yaml << 'EOL'
apiVersion: 1
datasources:
- name: $dbname
type: influxdb
url: http://localhost:8086
user: $usrname
password: $pssword
database: $dbname
access: proxy
editable: true
isDefault: true
EOL"
Если вы хотите перезаписать файл, вы должны использовать «>» после команды cat вместо «>>».
Если я вас правильно понял, вы можете попробовать это:
dbname=db
usrname=user
pssword=pass
sudo cat << EOL >> /etc/grafana/provisioning/datasources/InfluxDB.yaml
apiVersion: 1
datasources:
- name: $dbname
type: influxdb
url: http://localhost:8086
user: $usrname
password: $pssword
database: $dbname
access: proxy
editable: true
isDefault: true
EOL
Выход:
cat /etc/grafana/provisioning/datasources/InfluxDB.yaml
apiVersion: 1
datasources:
- name: db
type: influxdb
url: http://localhost:8086
user: user
password: pass
database: db
access: proxy
editable: true
isDefault: true