다음과 같은 텍스트로 가득 찬 파일이 있습니다.
CREATE TABLE `wild_adventure_game` (
`game_instance_id` bigint(20) unsigned NOT NULL,
`free_game_config_id` bigint(20) unsigned DEFAULT NULL,
`respin_instance_id` bigint(20) DEFAULT NULL,
`state` varchar(20) NOT NULL,
`stake` decimal(11,2) NOT NULL,
`pay_line_win` decimal(11,2) NOT NULL,
`bonus_win` decimal(11,2) NOT NULL,
`total_win` decimal(11,2) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1
줄 끝에 를 포함하는 쉼표가 있는 경우도 있고 ENGINE
그렇지 않은 경우도 있습니다. 나는 그 쉼표를 대체(즉, 삭제)하고 싶습니다. 저의 첫 번째 순진한 시도는 다음과 같았습니다.
sed -e 's/'$) ENGINE/$) ENGINE/' < the_file
물론 이것은 효과가 없었지만 sed
그것이 이루어질 수 있는 방식으로 논쟁을 벌이는 것이 가능합니까? 아니면 그렇지 않다면 아마도 awk
? 최악의 경우 bash 스크립트를 작성할 수 있지만 이는 다소 투박할 것입니다.
편집하다
위에 오타가 있었습니다. 다음과 같았어야 했습니다.
sed -e 's/,$) ENGINE/$) ENGINE/' < the_file
따라서 이 예에서는 마지막 줄 바로 옆 끝에 있는 쉼표를 아무것도 없는 것으로 바꾸거나 더 일반적으로는 일부 표현식과 일치하는 줄 앞의 마지막 줄 끝에서 일부 하위 문자열을 바꾸려고 합니다. 에 대한 실패한 시도에서 sed
나는 $
줄의 끝을 나타내곤 했는데, sed는 줄 끝을 가로질러가 아니라 줄을 하나씩 읽기 때문에 그것이 작동하지 않는다는 것을 이미 알고 있었습니다. 그러나 그것은 내가 달성하고 싶은 것을 보여줍니다. sed
.
답변1
어때?
sed '/ENGINE/ s/,$//' file
어떤 라인에 대해서도포함"ENGINE", 줄 끝에서 쉼표를 삭제합니다.
답변2
이상한 솔루션
/^) ENGINE/ {
sub( /,$/, "" )
print
next
}
{
print
}