Это зависит от того, какой файловый менеджер вы используете.
Если вы используете nemo
или другой файловый менеджер на основе GNOME, он, вероятно, использует GVfs (виртуальную файловую систему Gnome ), которая по умолчанию монтирует файлы в каталог ~/.gvfs/
или /run/user/$USERNAME/gvfs/
, где $USERNAME
заменяется вашим именем пользователя.
Если вы используете KDE, вам придется использовать альтернативную команду монтирования, поскольку по умолчанию файловый менеджер KDE использует KIO, который не делает монтирование доступным для -программ, не поддерживающих KIO. См. сообщение на форуме . Однако обратите внимание, что KDE чрезвычайно настраиваемый, поэтому переключить KIO
на fusesmb
не составит труда. Хотя сам я этого не делал.
идентификация частей на миллион Как вы знаете, sed — это потоковый редактор, ориентированный на строку, поэтому, когда решение печатать или не печатать лежит в другой строке, как в вашем случае, нам нужно организовать конечный автомат, и в этом случае им потребуются триггеры или переменные..
По сути, нам нужно придержать печать, пока мы не увидим правильное изменение состояния. Как и в этом случае, когда мы переходим из состояния (в строку электронной почты)-> состояние (только в строку пароля ).
Использование GNU sed
в расширенном режиме регулярных выражений -E
, что упрощает чтение кода sed и делает его запись менее подверженной обратной косой черте.
$ sed -Ee '
/^PASSWORD:/!{h;d;}
x;G;s/(^|\n)[^:]*:/\1/g
' test.txt
Основная идея состоит в том, чтобы сохранить строку, которая не является строкой пароля, в регистре хранения, чтобы, когда мы действительно доберемся до строки пароля, мы могли ее использовать.
Используя GNU awk
, мы по существу кодируем описанную выше функциональность sed в awk с awk-переменной e, служащей регистром хранения.
$ awk -F: '
/^PASSWORD:/&&
($0=e RS $2)"";{e=$2}
' test.txt
С помощью GNU grep
мы используем параметр «до» -B
, чтобы перечислить одну строку перед строкой пароля, затем удалить пунктирную строку, сгенерированную grep, и предположить, что никто не использует ее в качестве пароля.
$ < test.txt \
grep -B1 '^PASSWORD:' |
grep -Fxve -- | cut -d: -f2-
perl
можно использовать, как показано, когда мы выбираем следующую строку, а затем делаем проверки.
$ perl -ne '
/^EMAIL:/ && ($_.= <>);
/\nPASSWORD:/ && print(s/^[^:]+://mgr);
' tes.txt
встроенные функции bash
while IFS=: read -r a p; do
case $a in
'PASSWORD') printf '%s\n' "$e" "$p" ;;
*) e=$p ;;
esac
done < test.txt
Использование sed
для извлечения интересующих нас строк, а затем cut
для удаления строк PASSWORD:
и EMAIL:
из начала каждой строки:
$ sed -n 'N; /\nPASSWORD:/p' file | cut -d : -f 2-
user1@site.com
pass1
user2@site.com
pass2
user3@site.com
pass3
user6@site.com
pass6
Использование здесь cut
помогает упростить выражение sed
и, следовательно, всю команду.
Если этот файл всегда в этом формате с EMAIL
в начале каждой второй строки:
sed -n 'N;s/^EMAIL:\(.*\n\)PASSWORD:/\1/p'
должен сделать это. Или, чтобы быть в безопасности, ищите EMAIL:
как начало записи:
sed -n '/^EMAIL:/{N;s/^EMAIL:\(.*\n\)PASSWORD:/\1/p;}'
Вы также можете использовать pcregrep
с его многострочным режимом:
pcregrep -M -o1 -o2 --om-separator=$'\n' '^EMAIL:(.*)\nPASSWORD:(.*)'
sed "N;s/\n/ /g" filename| awk -F ":" '/PASSWORD/{gsub("PASSWORD","",$2);print $2"\n"$3 }'
output
user1@site.com
pass1
user2@site.com
pass2
user3@site.com
pass3
user6@site.com
pass6
Питон
#!/usr/bin/python
m=[]
k=open('filename','r')
for i in k:
m.append(i.strip())
for j in range(0,len(m),2):
if "PASSWORD" in m[j+1]:
print m[j].split(":")[-1]
print m[j+1].split(":")[-1]