Я не могу просмотреть изображение, которое Вы отправили выше, но если это - связанное с сетью, я предполагаю, что проблема могла бы идти с драйвером Wi-Fi.
Dell Inspiron 1464 идет с беспроводной картой Broadcom, вероятно, BCM4312, который имеет плохую поддержку драйвера Linux. Я испытал подобную панику ядра. Мой совет состоит в том, чтобы купить некоторую другую беспроводную карту (такую как Intel 5100, который я использую) заменять это.
Сделать это для однострочных строк очень просто:
sed 's/((([^)]*)))//g' file
Если вам нужно иметь дело с многострочными, это становится сложнее. Один из подходов заключается в использовании tr
для замены всех новых строк нулевым символом (\0
), в замене и обратном переводе:
tr '\n' '\0' < file | sed 's/((([^)]*)))//g' | tr '\0' '\n'
В качестве альтернативы можно просто использовать perl
:
perl -0pe 's/\(\(\([^)]+\)\)\)//g;' file
-0
заставляет perl
читать весь файл в память (это может быть проблемой для огромных файлов), -p
означает "распечатывать каждую строку", но из-за -0
, "строка" на самом деле является всем файлом. Идея s///
та же самая, что и для sed
.
Попробуйте
sed 's/((([^)]*)))//' file
или, вероятно, даже лучше в вашем предложении
sed 's/ ((([^)]*)))//' file
sed -e :p -e '/(((/!b
' -e :n -e 's/)))/\
/; s/(((.*\n//; tp
$d;N; s//(((/; tn'
Это должно сработать. При этом b
ranch away (и, соответственно, автопечать) любые строки, не совпадающие с ((((
), но после нахождения пытаются удалить все между первой происходящей последовательностью ((((
) и первой происходящей )))
. Если не может, потому что трейлинг ))
не найден на текущей строке, то он тянет за внешнюю строку N
ext, удаляет все между (((
) и заголовком следующей строки, и снова ищет. Если она доходит до конца последней строки $
при поиске )))
, то она отступает. Таким образом, он никогда не буферизирует больше, чем строка за раз, так как удаляет все, что следует за (((
) каждый раз, когда ему приходится втягивать новую строку.
Она должна обрабатывать столько пар (((
))
, сколько может произойти на линии - и не имеет значения, если между двумя концами возникнет какое-либо (
или )
- она будет искать прошедшие 2 или менее )
и любое число (
.
После нахождения ))
он сбрасывает поиск на ((((
) и поэтому не перестаёт обрабатывать следующую пару даже после пересечения границ новой линии.
:p
- объявите метку ветки p
. Здесь ветки скрипта, если он может заменить последовательность ))
на новую строку, а затем удалить все между ((((
и \n
. /(((/!b
- b
ranch away - и пространство шаблона автопечати - если в пространстве шаблона нет оставшихся (((
последовательностей. :n
- объявите ветку :
метка n
. Здесь ветки сценария, если (((
) найдена, но ))
не могут быть найдены на одной и той же строке. s/)))/\n/
- замена первого появления )))
на новую строку. Это происходит только в том случае, если (((
) уже было найдено совпадение. s/(((.*\n//
- замените все между первым ((((
) и единственным \n
в пространстве шаблонов. tp
- t
est для успешной замены; если верно, то ветка для обозначения :p
. $d;N
- последняя замена не прошла успешно; если текущая строка является $
последней d
elete, в противном случае добавьте N
ext к шаблону пространства. s//((/;tn
- повторите последний регенерат и замените все между первым происходящим (((
) и только что добавленной новой строкой для ((((
), а затем веткой для метки :n
.