Variable in sed

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












7















I have a file that contains filenames with absolute path.



In the middle of that path, is a variable directory, whenever I hard code the variable part, it works fine, but when I replace it with the variable name, the sed part doesn't work.



The sed part is to delete the pattern or for this matter, the path.



file=`echo $one_file | sed 's:/dir1/dir2/$VAR/last_dir/::'`









share|improve this question
























  • Try to replace single quotes with double quotes in your sed expression.

    – dnk
    Nov 7 '13 at 9:06
















7















I have a file that contains filenames with absolute path.



In the middle of that path, is a variable directory, whenever I hard code the variable part, it works fine, but when I replace it with the variable name, the sed part doesn't work.



The sed part is to delete the pattern or for this matter, the path.



file=`echo $one_file | sed 's:/dir1/dir2/$VAR/last_dir/::'`









share|improve this question
























  • Try to replace single quotes with double quotes in your sed expression.

    – dnk
    Nov 7 '13 at 9:06














7












7








7








I have a file that contains filenames with absolute path.



In the middle of that path, is a variable directory, whenever I hard code the variable part, it works fine, but when I replace it with the variable name, the sed part doesn't work.



The sed part is to delete the pattern or for this matter, the path.



file=`echo $one_file | sed 's:/dir1/dir2/$VAR/last_dir/::'`









share|improve this question
















I have a file that contains filenames with absolute path.



In the middle of that path, is a variable directory, whenever I hard code the variable part, it works fine, but when I replace it with the variable name, the sed part doesn't work.



The sed part is to delete the pattern or for this matter, the path.



file=`echo $one_file | sed 's:/dir1/dir2/$VAR/last_dir/::'`






shell-script sed filenames quoting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 7 '13 at 22:15









Gilles

544k12811071622




544k12811071622










asked Nov 7 '13 at 8:52









bostjanbostjan

382




382












  • Try to replace single quotes with double quotes in your sed expression.

    – dnk
    Nov 7 '13 at 9:06


















  • Try to replace single quotes with double quotes in your sed expression.

    – dnk
    Nov 7 '13 at 9:06

















Try to replace single quotes with double quotes in your sed expression.

– dnk
Nov 7 '13 at 9:06






Try to replace single quotes with double quotes in your sed expression.

– dnk
Nov 7 '13 at 9:06











1 Answer
1






active

oldest

votes


















8














When you use single-quotes, aka hard quotes, variable names are not expanded. You would need to use double-quotes, aka soft quotes.



sed "s:/dir1/dir2/$var/Last_dir/::"


or escape the quotes:



sed 's:/dir1/dir2/'"$var"'/Last_dir/::'


You would also need to be sure that $var does not hold any colon, dot, star, [, newline or backslash characters or that, if it does, they are escaped.






share|improve this answer

























  • $ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

    – jirib
    Nov 7 '13 at 9:09











  • @JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

    – Runium
    Nov 7 '13 at 9:13











Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f99190%2fvariable-in-sed%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









8














When you use single-quotes, aka hard quotes, variable names are not expanded. You would need to use double-quotes, aka soft quotes.



sed "s:/dir1/dir2/$var/Last_dir/::"


or escape the quotes:



sed 's:/dir1/dir2/'"$var"'/Last_dir/::'


You would also need to be sure that $var does not hold any colon, dot, star, [, newline or backslash characters or that, if it does, they are escaped.






share|improve this answer

























  • $ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

    – jirib
    Nov 7 '13 at 9:09











  • @JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

    – Runium
    Nov 7 '13 at 9:13















8














When you use single-quotes, aka hard quotes, variable names are not expanded. You would need to use double-quotes, aka soft quotes.



sed "s:/dir1/dir2/$var/Last_dir/::"


or escape the quotes:



sed 's:/dir1/dir2/'"$var"'/Last_dir/::'


You would also need to be sure that $var does not hold any colon, dot, star, [, newline or backslash characters or that, if it does, they are escaped.






share|improve this answer

























  • $ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

    – jirib
    Nov 7 '13 at 9:09











  • @JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

    – Runium
    Nov 7 '13 at 9:13













8












8








8







When you use single-quotes, aka hard quotes, variable names are not expanded. You would need to use double-quotes, aka soft quotes.



sed "s:/dir1/dir2/$var/Last_dir/::"


or escape the quotes:



sed 's:/dir1/dir2/'"$var"'/Last_dir/::'


You would also need to be sure that $var does not hold any colon, dot, star, [, newline or backslash characters or that, if it does, they are escaped.






share|improve this answer















When you use single-quotes, aka hard quotes, variable names are not expanded. You would need to use double-quotes, aka soft quotes.



sed "s:/dir1/dir2/$var/Last_dir/::"


or escape the quotes:



sed 's:/dir1/dir2/'"$var"'/Last_dir/::'


You would also need to be sure that $var does not hold any colon, dot, star, [, newline or backslash characters or that, if it does, they are escaped.







share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 7 '13 at 9:53









Stéphane Chazelas

312k57589946




312k57589946










answered Nov 7 '13 at 9:06









RuniumRunium

18.8k43060




18.8k43060












  • $ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

    – jirib
    Nov 7 '13 at 9:09











  • @JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

    – Runium
    Nov 7 '13 at 9:13

















  • $ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

    – jirib
    Nov 7 '13 at 9:09











  • @JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

    – Runium
    Nov 7 '13 at 9:13
















$ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

– jirib
Nov 7 '13 at 9:09





$ s="foo|bar" ; echo foobar | sed 's#.*#'"$s"'#;' works...??

– jirib
Nov 7 '13 at 9:09













@JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

– Runium
Nov 7 '13 at 9:13





@JiriXichtkniha: Yes, but if there is a #, newline etc. you would have trouble.

– Runium
Nov 7 '13 at 9:13

















draft saved

draft discarded
















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f99190%2fvariable-in-sed%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?