2013-10-28 4 views
0

나는 TEXTFILE끝에 특정 줄에 특정 문자열을 추가하십시오. -bash

personId, PERSONNAME을 포함 (particulars.txt), employmentType

particulars.txt이

1,jane,partTime 
2,bob,fullTime 
3,john,fullTime 

나는 그것이 같은 것을 확인 할 방법 I 키의 경우 그 사람이 풀 타임 또는 파트 타임 근로자인지 여부를 확인하고 사용자에게 월급을 입력하고 그 사람에게만 파일로 다시 쓰도록 요청할 것입니다. 나는 더 자세히 설명 할 것이다. 예

Enter Name:jane 
jane is a partTime staff 
Enter Hourly Salary:10 

위한

때문에 TEXTFILE (particulars.txt)는 이제 예 이제 두

Enter Name:bob 
bob is a fullTime staff 
Enter monthly Salary:1600 

때문에 TEXTFILE (particulars.txt)

1,jane,partTime,10 
2,bob,fullTime 
3,johnfullTime 

할 것이다 be

이 (210) 내가 가진 무엇 내 코드

#!/bin/bash 
fileName="particulars.txt" 
read -p "Enter name:" name 
if grep -q $name $fileName; then 
    employmentType=$(grep $name $fileName | cut -d, -f4) 
    echo "$name is $employmentType" staff" 
    if [ $employmentType == "partTime" ]; then 
      echo "Enter hourly pay:" 
      read hourlyPay 
      #calculations for monthly salary(which I have not done) 

    elif [ $employmentType == "fullTime" ]; then 
      echo "Enter monthly salary:" 
      read monthlySalary   
    fi  
else 
    echo "No record found" 
fi 

read -p "Press[Enter Key] to Contiune.." readEnterKey 

나는 그 사람이 속한 않는 고용 형태 찾을에만 수 있어요,하지만 난 급여를 추가하기 위해 무엇을 할 방법/확실하지 않다 저 특별한 사람을위한 선의 끝에. 나는 sed에 대해 읽었지만 결과를 얻기 위해 sed를 사용하는 방법에 여전히 혼란스러워서 너희들에게 도움을 구한다. 사전

답변

1

방금 ​​스크립트를 수정했습니다.

#!/bin/bash 
fileName="particulars.txt" 
read -p "Enter name:" name 
if grep -q $name $fileName; then 
    employmentType=$(grep $name $fileName | cut -d, -f3) 
    emp_name=$(grep $name $fileName | cut -d, -f2) # Getting emp name 
    emp_id=$(grep $name $fileName | cut -d, -f1) # Getting id 
    echo "$name is $employmentType staff" 
    if [ $employmentType == "partTime" ]; then 
      echo "Enter hourly pay:" 
      read hourlyPay 
      #calculations for monthly salary(which I have not done) 
      sed -i "s/^$emp_id.*$/&,$hourlyPay/g" $fileName # Modifying the file by using id. 

    elif [ $employmentType == "fullTime" ]; then 
      echo "Enter monthly salary:" 
      read monthlySalary 
    fi 
else 
    echo "No record found" 
fi 

read -p "Press[Enter Key] to Contiune.." readEnterKey 

다음 줄을 추가했습니다.

emp_id=$(grep $name $fileName | cut -d, -f1) 
emp_name=$(grep $name $fileName | cut -d, -f2) 
sed -i "s/^$emp_id.*$/&,$hourlyPay/g" $fileName 
+0

감사합니다. – user2211678

2

감사 당신은 대화 형 방식으로 그것을 할 필요, 당신은 말할 수없는 한 :

sed '/\bbob\b/{s/$/,1600/}' filename 

bob 일치하는 라인에 ,1600을 추가합니다. 단어 경계를 \b으로 지정하면 또는 boba이 아니라 bob에 대해서만 변경이 수행됩니다.

당신은 파일 의 변경에 장소를 만들기 위해 -i 옵션을 사용할 수 있습니다

sed -i '/\bbob\b/{s/$/,1600/}' filename 

편집 : 쉘 변수를 사용하려면 sed 명령에 대한 따옴표를 사용합니다 :

sed "/\b$employeeName\b/{s/^$/,$monthlySalary/}" filename 
+0

귀하의 조언에 감사드립니다. ** sed '/ \ $ employeeName {s/$, $ monthlySalary}'파일 이름 **과 같은 것으로 변경할 수 있다면 가능합니까?이런 식으로 나는 멍청이 만 바꾸는 것보다 더 대화식으로 할 것입니다. – user2211678

+0

@ user2211678 예, 큰 따옴표를 사용해야한다는 점만 제외하면 가까이있었습니다. 위의 편집을 참조하십시오. – devnull

+0

도움을 주셔서 감사합니다. – user2211678

관련 문제