2014-04-22 4 views
0

는 그때 결과를 저장, 당신은 입력으로 파일 'passwords.txt을'읽기 '#'에 소문자 모든 '$'로 마다 대문자를 변경하려면 가정 같은 파일 (덮어 쓰기)에 저장합니다. tr 명령어로 어떻게 할 수 있습니까? 힌트 : 파이프 및 파일 리디렉션을 사용하십시오.유닉스 배관 및 재

이 두 명령을 시도했지만 작동하지 않았습니다. 파일이 시스템에 의해 잘려서 password.txt가 비어 있다고 생각합니다.

cat passwords.txt | '[az "!"] [az "#"]'[az "#"] '< passwords.txt> passwords.txt [tr] [A-Z'! ']'[[a-z '#'] '

나는 우리가 임시 파일에 쓰기처럼 뭔가를하고 passwords.txt하기 위해 임시 파일 이름을 변경하려면 "& &"를 사용할 수 있습니다 알고있다. 그러나 이것은 숙제 문제이며 아직 "& &"에 대해 배우지 않았으므로 파이핑 및 리디렉션만으로이 작업을 수행 할 수있는 또 다른 방법이 있어야한다고 생각합니다.

답변

1

나는 파일이 시스템에 의해 잘려서, passwords.txt가 비어있게된다고 생각한다.

정확합니다. tr 출력을 임시 파일로 리디렉션하고 임시 파일을 원래 파일로 이동해야합니다.

또한 (나는 이것이 $ 인 것으로 가정 함) 및 #을 따옴표로 사용하는 것이 불필요합니다. 당신은 말할 수 :

cat /etc/passwd | tr 'A-Z$' 'a-z#' > temp && mv temp /etc/passwd 

또는 간접을 사용하여 cat의 불필요한 사용을 제거 :

tr 'A-Z$' 'a-z#' </etc/passwd> temp && mv temp /etc/passwd 
여기

&&은 두 명령을 분리하는 제어 연산자입니다. 당신이 말한다면 :

command1 && command2 

다음 경우 Command2를 실행되고, 단지 명령어 1이 성공하면 제로의 종료 상태, 즉를 반환 명령어 1, 경우.

sat:~# cat > sample 
sample TEXT 
$test 
sat:~# 
sat:~# echo "$(tr '[A-Z$]' '[a-z#]' < sample)" > sample 
sat:~# cat sample 
sample text 
#test 
sat:~# 
: 여기
1

echo "$(tr '[A-Z$]' '[a-z#]' < sample)" > sample 

, 테스트&&을 사용하지 않고 다른 방법