나는 사용하고 싶다패스를 유지하다(win10x64).
문제는 이것이 수년에 걸쳐 내 비밀번호가 수집된 방식입니다.
각 사용자 이름/비밀번호 쌍은 별도의 텍스트 파일에 있고
파일 이름은 관련 비밀번호의 도메인 이름이며
각 .txt 파일의 첫 번째 줄은 다음과 같습니다. 사용자 이름 및 두 번째 비밀번호(접두사가 붙지 않음)
예를 들어:
파일 이름: ( reddit.com
.txt 확장자도 있지만 생략 가능) 내용:
my_username
my_Password
위의 내용을 CSV로 만들려면 다음으로 변환해야 합니다.
"Account","Login Name","Password","Web Site", "Notes"
"Entry 1","my_username","my_password","http://reddit.com", ""
즉
"Account","Login Name", "Password", "Web Site", "Notes"
"Entry 1","my_username", "my_password", "http://reddit.com", ""
참고: 비밀번호에 쉼표( ,
), 큰따옴표( "
) 또는 백슬래시( )가 있으면 백슬래시로 이스케이프해야 합니다.\
bash 스크립트(cygwin)를 통해 이 작업을 어떻게 수행할 수 있나요?
지금까지 수집한 코드 조각은 다음과 같습니다.
파일의 각 줄 시작 부분에 문자열을 추가하는 방법은 무엇입니까? (원천)
awk '{print "prefix" $0}' file
file.txt의 n번째 줄을 인쇄하세요. (원천)
awk "NR==2{print;exit}" file.txt // for printing the 2nd line
발견된 모든 파일에 대해 명령을 반복적으로 실행합니다.
find . -name "*.txt" -execdir *command*
또는 대안적으로
for file in /cygdrive/c/folder/*; do *command* // command example: mv "$file" "${file}/.." done
따라서 내 스크립트는 다음과 같이 시작해야 합니다.
find . -name "*.txt" -execdir awk '{print '"Account","Account","Login Name","Password","Web Site", "Notes"' $0}' "$file"
나는이 시점에서 막혔다.
답변1
입력 파일:
- 야후.net.txt
- google.com.txt
- reddit.com.txt
콘텐츠 yahoo.net.txt
:
user1-yaho0
pas,,
콘텐츠 gougle.com.txt
:
user1-google
pas"wor,d
콘텐츠 reddit.com.txt
:
user1-reddit
pas\wor\d
이 입력을 사용하면 다음과 같은 빠르고 더러운 스크립트가 작업을 수행합니다.
#!/bin/bash
echo "\"Account\",\"Login Name\",\"Password\",\"Web Site\",\"Notes\"" > output.csv
num=0
for f in `find . -type f -name '*.txt'` ; do
num=$((num + 1))
user=`head -1 "$f"`
password=`sed 1d "$f" | sed -r 's/([\\,"])/\\\\\1/g'`
domain=`basename "$f" | sed 's/\.txt$//'`
echo "\"$num\",\"$user\",\"$password\",\"$domain\",\"\"" >> output.csv
done
콘텐츠 output.csv
:
"Account","Login Name","Password","Web Site","Notes"
"1","user1-reddit","pas\\wor\\d","reddit.com",""
"2","user1-yaho","pas\,\,","yahoo.net",""
"3","user1-google","pas\"wor\,d","gougle.com",""
답변2
그리고awk
awk 'BEGIN{print "\"Account\",\"Login Name\",\"Password\",\"Web Site\",\"Notes\""}
{ if (FNR==1){
user=$0;a+=1};
if(FNR==2){
print "\""a"\",\""user"\",\""$0"\",\""gensub(/\.txt/,"","",FILENAME)"\","}}' *.txt
awk 특수 변수를 사용하여 FNR
각 파일에서 첫 번째와 두 번째 줄을 가져오고 *.txt
문자열 조작 기능을 사용하여 gensub
URL 열(특수 변수)에서 제거합니다..txt
FILENAME
awk