sed/awk는 일치 후 특정 위치의 문자를 삭제합니다.

sed/awk는 일치 후 특정 위치의 문자를 삭제합니다.

저는 awk 또는 sed 솔루션을 찾고 있습니다. 저는 천재도 아닙니다. 나는 이 글을 쓰기 시작했을 때 나온 모든 제안을 읽었습니다.

데이터 행이 포함된 파일이 있습니다.

name
 thisdate=Sep  2 23:59:59 2022 GMT
name
 thisdate=Sep 15 23:59:59 2022 GMT

이름과 날짜/시간이 모두 다릅니다. 날짜 번호는 항상 같은 위치에 있고 항상 같은 문자 수를 차지합니다(2). 시/분/초는 항상 줄 위의 같은 위치에 있습니다. 모든 줄이 thisdate항상 미래의 날짜인 것은 아니며 빈 줄도 없습니다.

닫으려고 시도하여 이 날짜 행에서 시간을 제거하려고 합니다  thisdate=(선행 공백 thisdate). 그런 다음 위치 18-26의 문자를 제거합니다(올바르게 계산된 경우).

나는 몇 가지를 시도했지만 주로 올바른 방향을 제시하기 위해 내 필요에 맞는 것을 찾고 있습니다.

  952  sed 's/^\(.\{18\}\)\(.\{26\}\)/\1/' file  <--this may not have worked as I didn't key on a match?
  958  sed -i 's/thisdate=(.{11})18/\26/' file
  959  sed -i 's/thisdate=(.{10})17/\25/' file

나는 뭔가를 놓치고 있다고 확신하지만 누구든지 올바른 방향으로 나를 가리킬 수 있다면 감사하겠습니다!

답변1

6번째 문자 이후의 9자를 삭제하는 것만으로도 충분할 것 같습니다  thisdate=.

sed 's/^\( thisdate=.\{6\}\).\{9\}/\1/' file

주어진 데이터에 대해 다음이 생성됩니다.

name
 thisdate=Sep  2 2022 GMT
name
 thisdate=Sep 15 2022 GMT

관련 정보